ACS 中支持的令牌格式
更新时间:2015 年 6 月 19 日
适用于:Azure
当 Web 应用程序和服务使用Microsoft Azure Active Directory 访问控制 ((也称为访问控制服务或 ACS) )处理身份验证时,客户端必须获取 ACS 颁发的安全令牌才能登录到应用程序或服务。 ACS 可以采用以下格式颁发安全令牌:
安全断言标记语言 (SAML) 1.1 和 2.0
简单 Web 令牌 (SWT)
JSON Web 令牌 (JWT)
注意
ACS 可以采用以下任何格式颁发安全令牌。 ACS 用于 Web 应用程序或服务的令牌格式由信赖方应用程序配置决定。 有关配置信赖方应用程序的信息,请参阅 信赖方应用程序。
安全断言标记语言 (SAML) 1.1 和 2.0
安全断言标记语言 (SAML) 是目前用于单一登录 (SSO) 和基于声明的标识的最早而又最常见的令牌格式。 SAML 为令牌和协议指定了 XML 格式,以便使用 SAML 令牌执行 Web 应用程序或 Web 服务 SSO。 有关 SAML 令牌的详细信息,请参阅 SAML 规范 (https://go.microsoft.com/fwlink/?LinkID=213719) 。
注意
许多开发平台(包括Windows Identity Foundation (https://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>https://localhost:63000/</Audience>
</AudienceRestriction>
</conditions>
<attributestatement>
<Attribute Name="https://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider">
<AttributeValue>uri:WindowsLiveID</AttributeValue>
</Attribute>
</attributestatement>
</assertion>
简单 Web 令牌 (SWT)
简单 Web 令牌 (SWT) 遵从 SimpleWebToken 规范。 SWT 令牌表示为用加密密钥签名的窗体编码键/值对。 该规范强制包含某些键/值对,但也为应用程序特定的键/值对留出了空间。 下表显示了 ACS 颁发的 SWT 令牌中始终存在的密钥。
密钥 | 说明 |
---|---|
颁发者 |
颁发令牌的 ACS 服务命名空间的表示形式。 此值的模式 https://< servicenamespace.accesscontrol.windows.net/>。 |
目标受众 |
用于请求令牌的 |
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 解码值的令牌内容。
源 | 密钥 | URL 编码值 | URL 解码值 |
---|---|---|---|
用户定义的声明 |
角色 (role) |
Admin%2cUser |
Admin,User |
customerName |
Contoso%20Corporation |
Contoso Corporation |
|
系统定义的声明 |
颁发者 |
https%3a%2f%2fmyservice.accesscontrol.windows.net%2f |
https://myservice.accesscontrol.windows.net/ |
目标受众 |
http%3a%2f%2flocalhost%2fmyservice |
https://localhost/myservice |
|
ExpiresOn |
1255912922 |
1255912922 |
|
HMACSHA256 |
yuVO%2fwc58%2ftYP36%2fDM1mS%2fHr0hswpsGTWwgfvAbpL64%3d |
yuVO/wc58/tYP36/DM1mS/Hr0hswpsGTWwgfvAbpL64= |
JSON Web 令牌 (JWT)
我们目前正在 Beta 版本中添加 JSON Web 令牌 (JWT) 支持,这意味着,我们可能会在不事先发出通告的情况下做出突发性的变更。
JWT 令牌格式的 ACS 实现遵循 JWT 规范草案 9。 有关详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkID=253666。 与 SWT 令牌类似,JWT 是适用于 REST Web 服务的精简令牌格式。 与 SWT 格式不同,JWT 支持各种签名选项。 ACS 支持 JWT 令牌的对称和非对称签名。 下表显示了 ACS 颁发的 JWT 令牌中始终存在的声明。
声明 | JWT 使用的声明类型 | 说明 |
---|---|---|
颁发者 |
iss |
颁发令牌的访问控制命名空间的表示形式。 此值的模式为 https://< namespace.accesscontrol.windows.net/> |
目标受众 |
aud |
用于请求令牌的作用域的值。 此值用于标识令牌的目标接收者。 |
不早于 |
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” ]
}
ACS 令牌和协议
当发出 SAML 2.0、SAML 1.1、SWT、JWT 令牌时,ACS 使用各种标准协议将令牌返回到 Web 应用程序或服务。 ACS 支持以下令牌格式/协议组合:
ACS 可以通过WS-Trust和WS-Federation协议 (颁发和返回 SAML 2.0 令牌,具体取决于令牌请求) 中使用的协议。
ACS 可以根据令牌请求) 中使用的协议,通过WS-Federation和相关WS-Trust协议 (颁发和返回 SAML 1.1 令牌。
ACS 可以通过 WS 联合身份验证、WS 信任和 OAuth WRAP 或 OAuth 2.0 协议颁发和返回 SWT 令牌, (具体取决于令牌请求中使用的协议) 。
ACS 可以通过 WS 联合身份验证、WS 信任或 OAuth 2.0 协议颁发 JWT 令牌, (具体取决于令牌请求中使用的协议) 。