在 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) 是目前用於單一登入和以宣告為基礎的身分識別最舊且最常見的權杖格式。 SAML 會為權杖與通訊協定指定一個 XML 格式,以使用 SAML 權杖執行 Web 應用程式或的 Web 服務 SSO。 如需 SAML 權杖的詳細資訊,請參閱 SAML 規格 (https://go.microsoft.com/fwlink/?LinkID=213719) 。
注意
許多開發平臺廣泛支援 SAML 1.1 和 SAML 2.0 權杖,包括Windows Identity Foundation (https://go.microsoft.com/fwlink/?LinkID=213729) 。
以下是 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 權杖中的金鑰。
Key | 描述 |
---|---|
簽發者 |
發出權杖的 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)
JSON Web 權杖 (JWT) 支援將要加入 Beta 版中,這表示可能會有重大變更,但不另行通知。
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。 若要使用非對稱金鑰簽署 JWT,請使用具有憑證的 x509。 |
以下是 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-Federation、WS-Trust 和 OAuth WRAP 或 OAuth 2.0 通訊協定發出並傳回 SWT 權杖, (取決於權杖要求) 中使用的通訊協定。
ACS 可以透過 WS-Federation、WS-Trust 或 OAuth 2.0 通訊協定發出 JWT 權杖, (取決於權杖要求) 中使用的通訊協定。