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/>。

目标受众

用于请求令牌的 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 解码值的令牌内容。

密钥 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 令牌, (具体取决于令牌请求中使用的协议) 。

另请参阅

概念

ACS 体系结构
ACS 2.0 组件