此页面有用吗?
您对此内容的反馈非常重要。 请告诉我们您的想法。
更多反馈?
1500 个剩余字符
导出 (0) 打印
全部展开

ACS 中支持的令牌格式

发布时间: 2011年4月

更新时间: 2015年6月

应用到: Azure

当你的 Web 应用程序和服务通过 Microsoft Azure Active Directory 访问控制(也称为访问控制服务或 ACS)处理身份验证时,客户端必须获取 ACS 颁发的安全令牌才能登录到你的应用程序或服务。ACS 可以颁发采用以下格式的安全令牌:

note备注
ACS 可以颁发采用以下任意格式的安全令牌。ACS 用于 Web 应用程序或服务的令牌格式由信赖方应用程序配置决定。有关配置信赖方应用程序的信息,请参阅信赖方应用程序

安全断言标记语言 (SAML) 是目前用于单一登录 (SSO) 和基于声明的标识的最早而又最常见的令牌格式。SAML 为令牌和协议指定了 XML 格式,以便使用 SAML 令牌执行 Web 应用程序或 Web 服务 SSO。有关 SAML 令牌的详细信息,请参阅 SAML 规范 (http://go.microsoft.com/fwlink/?LinkID=213719)。

note备注
许多开发平台,包括 Windows Identity Foundation (http://go.microsoft.com/fwlink/?LinkID=213729),都支持 SAML 1.1 和 SAML 2.0 令牌。

下面提供了 SAML 令牌的一个示例。

<assertion id="_4fe09cda-cad9-49dd-b493-93494e1ae4f9" issueinstant="2012-09-18T20:42:11.626Z"
    version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
<issuer>https://test05.accesscontrol.windows.net/</issuer>
<ds:signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:signedinfo>
        <ds:canonicalizationmethod algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
        <ds:signaturemethod algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
        <ds:reference uri="#_4fe09cda-cad9-49dd-b493-93494e1ae4f9">
            <ds:transforms>
                <ds:transform algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                <ds:transform algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
            </ds:transforms>
            <ds:digestmethod algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
            <ds:digestvalue>8qmfRKuATFuo4M96xuci7HCLUGUeO3eBxHOi9/HaFNU=</ds:digestvalue>
        </ds:reference>
    </ds:signedinfo>
<ds:signaturevalue>UWcXJElfrP8hfdNi8ipzSjfxCYGYzoylkn5HdSa8IhphvyZBvbZl1OFEbMSygoo8xNgnywUNPuzZP8nV7CwZNuSWVZZSrF2pHAswBKQoJoodpzrGRR0ruT+A2sjXfnLQqN+X/xanXqqg4ViUOR9xHvn8vzaRwYxPPsjI4OXq0hzLlyuBzhw42XHzZk1qknQr1wp/lZTMwrFnY38gziUZ+Ci1Duen5Xt9k+0ZFujtSBqJKIran1V263o8CkvoahNcNKT//OcXc3va7zeJf67V9/lwY34MkFoqqfeuTSzEuZfk7pYRNqwhOZGhokpR+1qHjEbJr3p6dOOPkuQp9p6zsQ==</ds:signaturevalue>
    <keyinfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <X509Data>       <X509Certificate>MIIDCDCCAfCgAwIBAgIQRmI8p7P/aphMv5Kr9vQpqTANBgkqhkiG9w0BAQUFADAtMSswKQYDVQQDEyJBQVJPTkJPT0subnRkZXYuY29ycC5taWNyb3NvZnQuY29tMB4XDTEyMDUyMTIzMjMxMFoXDTEzMDUyMTAwMDAwMFowLTErMCkGA1UEAxMiQUFST05CT09LLm50ZGV2LmNvcnAubWljcm9zb2Z0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAI79l6EOSWswJn3d9i4yfZh9Cwo2XNhb4tOWvmljCKFlrWoz/Drch5aOzdmI/yFaqkyX7BXc/zoSmX1n3VkqHIeJkGECcZX2bD4jPuICVmKBcXo0SeQ+2vF6DoqjVKaegWrPsqmDrlCscnlMLb11Fg1Ffqkm8wyyWwbQvC5VnVf0i9DPE0n+i3NJi9cT57obrNRkQzwfBZy08I2JlpxLfaUUDhHlF99C1MtBduzn3au+S20gom1cHAcSvHBormXbjPZ5F6RJUz7kO/U+M5rYkiS+vtANtnBlUAK8fRmEUrYFRMr1tyiOXcRid/7UJP3e0EmAsneMnuD9WO/mK6MuzIECAwEAAaMkMCIwCwYDVR0PBAQDAgQwMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBBQUAA4IBAQBCRM9maY5ZE+wIxefxjT0IAqp7H6l062PKOGdld5MapOJUWbng2CrfUV3YI5OSD9yhevgDne3jf2DUBv5QndHdms+FL260ydDmwet4A5kJi3ZBO4sR/PZTz3FdeeOwdTeUS2wAMJuphAZ1+PUVk25bbEu/DKmgeYzRn64CHWqk5sPKzH9jAszvX2EeoClI+8Sp/bXHTwzEUOFYcicPOO+tuFTqHOYBDT5bE42rAp/SaC1wXbmTCGS12gfCZCrlml6LZNTsKQWBF2szXOPGcFcInGkauZDUUtZd+921uy0E/sYwgNfi8phU1aGZjIESVFQ70LpfvIMwF6++BRX12icW</X509Certificate>
        </X509Data>
    </keyinfo>
</ds:signature>
<subject>
    <NameID>abc1def2ghi3jkl4mno5pqr6stu7vwx8yza9bcd0efg=</NameID>
    <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer" />
</subject>
    <conditions notbefore="2012-09-18T20:42:11.610Z" notonorafter="2012-09-18T21:42:11.610Z">
        <AudienceRestriction>
            <Audience>http://localhost:63000/</Audience>
        </AudienceRestriction>
    </conditions>
    <attributestatement>
        <Attribute Name="http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider">
            <AttributeValue>uri:WindowsLiveID</AttributeValue>
        </Attribute>
    </attributestatement>
</assertion>

简单 Web 令牌 (SWT) 遵从 SimpleWebToken 规范。SWT 令牌表示为用加密密钥签名的窗体编码键/值对。该规范强制包含某些键/值对,但也为应用程序特定的键/值对留出了空间。下表显示了 ACS 颁发的 SWT 令牌中始终包含的键。

 

Key 说明

Issuer

表示颁发了令牌的 ACS 服务命名空间。此值的模式为 https://<服务命名空间>.accesscontrol.windows.net/。

读者

用于请求令牌的 applies_to 的值。此值为 HTTP 或 HTTPS URI。

ExpiresOn

令牌到期的 Epoch 时间。

HMACSHA256

所有其他键/值对的 HMACSHA256 签名。此键/值对始终是令牌中的最后一个键/值对。其他键/值对(包括应用程序特定的声明)的窗体编码表示形式都会进行签名。

除了这些键/值对以外,ACS 还会在颁发令牌之前向令牌中添加一个或多个声明。在请求令牌时,ACS 中包含的规则配置将驱动这些声明。所有此类声明都有一个类型以及一个或多个值,其中的类型和值都是字符串。当某个声明包含多个值时,这些值以逗号(“,”)字符分隔。与上表中所述的键/值对一样,声明也会编码为键/值对。

下面提供了 ACS 令牌(包含表示为键/值对的声明)的一个示例。

Audience=http%3a%2f%2flocalhost%2fmyservice&ExpiresOn=1255913549Issuer=https%3a%2f%2fmyservice.accesscontrol.windows.net%2f&role=Admin%2cUser&role=Admin%2cUser&&HMACSHA256=sT7Hr9z%2b3t1oDFLpq5GOToVsu6Dyxpq7hHsSAznmwnI%3d

这些键/值对可以遵循任意顺序,但 HMACSHA256 键/值对除外。以下 ACS 令牌等效于前面的 ACS 令牌,只是它们的签名有所不同。

role=Admin%2cUser&customerName=Contoso%20Corporation&Issuer=https%3a%2f%2fmyservice.accesscontrol.windows.net%2f&Audience=http%3a%2f%2flocalhost%2fmyservice&ExpiresOn=1255912922&HMACSHA256=yuVO%2fwc58%2ftYP36%2fDM1mS%2fHr0hswpsGTWwgfvAbpL64%3d

下表显示了具有 URL 解码值的令牌内容。

 

Key URL 编码值 URL 解码值

用户定义的声明

角色

Admin%2cUser

Admin,User

customerName

Contoso%20Corporation

Contoso Corporation

系统定义的声明

Issuer

https%3a%2f%2fmyservice.accesscontrol.windows.net%2f

https://myservice.accesscontrol.windows.net/

读者

http%3a%2f%2flocalhost%2fmyservice

http://localhost/myservice

ExpiresOn

1255912922

1255912922

HMACSHA256

yuVO%2fwc58%2ftYP36%2fDM1mS%2fHr0hswpsGTWwgfvAbpL64%3d

yuVO/wc58/tYP36/DM1mS/Hr0hswpsGTWwgfvAbpL64=

我们目前正在 Beta 版本中添加 JSON Web 令牌 (JWT) 支持,这意味着,我们可能会在不事先发出通告的情况下做出突发性的变更。

JWT 令牌格式的 ACS 实现遵从 JWT 规范草案 9。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=253666。与 SWT 令牌类似,JWT 是适用于 REST Web 服务的精简令牌格式。与 SWT 格式的不同之处在于,JWT 支持多种签名选项。ACS 支持 JWT 令牌的对称和非对称签名。下表显示了 ACS 颁发的 JWT 令牌中始终包含的声明。

 

声明 JWT 使用的声明类型 说明

Issuer

iss

表示颁发了令牌的 “访问控制”命名空间。此值的模式为 https://<命名空间>.accesscontrol.windows.net/

读者

aud

用于请求令牌的作用域的值。此值用于标识令牌的目标接收者。

Not Before

nbf

令牌生效前的 Epoch 时间。

过期

exp

令牌到期的 Epoch 时间。

JWT 令牌支持以下算法:

 

JWT 标头中的算法标识符 说明

HS256

使用 SHA-256 哈希算法的 HMAC。用于通过对称密钥为 JWT 签名。

RS256

使用 SHA-256 哈希算法的 RSA。用于使用 x509 和证书通过非对称密钥为 JWT 签名。

下面提供了 JWT 令牌的一个示例:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJodHRwczovL2NvbnRvc28uY29tL3JlbHlpbmdwYXJ0eSIsImlzcyI6Imh0dHBzOi8vY29udG9zby5hY2Nlc3Njb250cm9sLndpbmRvd3MubmV0LyIsIm5iZiI6MTMzNjA2NzMzOCwiZXhwIjoxMzM2MDcwOTM4LCJuYW1laWQiOiJjbGllbnRBcHAiLCJpZGVudGl0eXByb3ZpZGVyIjoiY29udG9zby5jb20ifQ._3dZQ6cmmFgrZ_-VmOLrr7CHne3Xdko_WtE6-Je5Ihw. 

JWT 由段组成,这些段以“.”分隔。下表显示了某个 JWT 令牌的解码段:

 

JWT 段

JWT 标头

{"typ":"JWT","alg":"HS256"}

JWT 声明集

{"aud":"https://contoso.com/relyingparty","iss":"https://contoso.accesscontrol.windows.net/","nbf":1336067338,"exp":1336070938,"nameid":"clientApp","identityprovider":"contoso.com"}

签名

_3dZQ6cmmFgrZ_-VmOLrr7CHne3Xdko_WtE6-Je5Ihw

具有多个值的单个声明以 JSON 数组表示。例如,如果某个用户是多个角色的成员,则角色声明将显示为:

{
 "aud":"https://contoso.com/relyingparty",
"iss":"https://contoso.accesscontrol.windows.net/",
"nbf":1336067338,"exp":1336070938,
"nameid":"frankm",
"identityprovider":"contoso.com",
“role”: [ “admin”, “user” ]
}

在颁发 SAML 2.0、SAML 1.1、SWT 或 JWT 令牌时,ACS 使用不同的标准协议将令牌返回到 Web 应用程序或服务。ACS 支持以下令牌格式/协议组合:

  • ACS 可以通过 WS 信任和 WS 联合身份验证协议(取决于令牌请求中使用的协议)颁发和返回 SAML 2.0 令牌。

  • ACS 可以通过 WS 联合身份验证和相关的 WS 信任协议(取决于令牌请求中使用的协议)颁发和返回 SAML 1.1 令牌。

  • ACS 可以通过 WS 联合身份验证、WS 信任和 OAuth WRAP 或 OAuth 2.0 协议(取决于令牌请求中使用的协议)颁发和返回 SWT 令牌。

  • ACS 可以通过 WS 联合身份验证、WS 信任和 OAuth 2.0 协议(取决于令牌请求中使用的协议)颁发 JWT 令牌。

另请参阅

社区附加资源

添加
显示:
© 2015 Microsoft