Форматы токенов, поддерживаемые в ACS
Обновлено: 19 июня 2015 г.
Область применения: Azure
Когда веб-приложения и службы обрабатывают проверку подлинности с помощью Microsoft Azure Active Directory контроль доступа (также называемой службой контроль доступа или ACS), клиент должен получить маркер безопасности, выданный ACS, для входа в приложение или службу. ACS может выдавать маркеры безопасности в следующих форматах:
Security Assertion Markup Language (SAML) 1.1 и 2.0
Простой веб-маркер (SWT)
Веб-токен JSON (JWT)
Примечание
ACS может выдавать маркеры безопасности в любом из следующих форматов. Формат маркера, который ACS использует для веб-приложения или службы, определяется конфигурацией приложения проверяющей стороны. Сведения о настройке приложений проверяющей стороны см. в разделе "Приложения проверяющей стороны".
Security Assertion Markup Language (SAML) 1.1 и 2.0
Security Assertion Markup Language (SAML) — это самый старый и распространенный формат токенов для единого входа (SSO) и удостоверений на основе утверждений. SAML определяет формат XML для токенов и протоколов, необходимый для единого входа в веб-приложение или службу с помощью токенов SAML. Дополнительные сведения о токенах 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>
Простой веб-маркер (SWT)
Токены Simple Web Token (SWT) соответствуют спецификациям стандарта SimpleWebToken. Токены SWT представляют собой закодированные пары ключей и значений, подписанные криптографическим ключом. Согласно спецификациям обязательно наличие каких-либо пар ключей и значений, но также могут использоваться и специальные пары приложения. Ключи, которые всегда присутствуют в маркере SWT, выданном ACS, приведены в следующей таблице.
Клавиши | Описание |
---|---|
Издатель |
Представление пространства имен службы ACS, выдавшего маркер. Шаблон для этого значения — https://< servicenamespace.accesscontrol.windows.net/>. |
Аудитория |
Значение |
ExpiresOn |
Время эпохи, через которое срок действия токена истекает. |
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-адреса |
---|---|---|---|
Утверждения, определенные пользователем |
роль |
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 (JWT)
Поддержка веб-токенов JSON (JWT) будет добавлена в бета-версию, т. е. существенные изменения могут появиться без предупреждения.
Реализация ACS формата токена JWT соответствует черновику спецификации JWT 9. Для получения дополнительной информации см. https://go.microsoft.com/fwlink/?LinkID=253666. Как и SWT, JWT — это компактный формат токенов, подходящий для веб-служб REST. В отличие от формата SWT, JWT поддерживает различные параметры подписывания. ACS поддерживает симметричные и асимметричные подписи для токенов JWT. Утверждения, которые всегда присутствуют в маркерах JWT, выданных ACS, приведены в следующей таблице.
Утверждение | Тип утверждения, используемый JWT | Описание |
---|---|---|
Издатель |
iss |
Представление пространства имен контроль доступа, выдавшего маркер. Шаблон для этого значения — https://< namespace.accesscontrol.windows.net/> |
Аудитория |
aud |
Значение области, которое используется для запроса токена. Оно используется для определения получателя токена. |
До |
nbf |
Время эпохи, через которое токен становится недействительным. |
Окончание срока действия |
exp |
Время эпохи, через которое срок действия токена истекает. |
Для токенов JWT поддерживаются следующие алгоритмы:
Идентификатор алгоритма в заголовке JWT | Описание |
---|---|
HS256 |
HMAC с использованием хэш-алгоритма SHA-256. Для подписывания JWT с симметричным ключом. |
RS256 |
RSA с использованием хэш-алгоритма SHA-256. Для подписи токена 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 использует различные стандартные протоколы для возврата маркера в веб-приложение или службу. ACS поддерживает следующие сочетания форматов маркеров и протоколов:
ACS может выдавать и возвращать токены SAML 2.0 через протоколы WS-Trust и WS-Federation (в зависимости от протокола, используемого в запросе маркера).
ACS может выдавать и возвращать токены SAML 1.1 через WS-Federation и связанные протоколы WS-Trust (в зависимости от протокола, используемого в запросе маркера).
ACS может выдавать и возвращать маркеры SWT через протоколы WS-Federation, WS-Trust и OAuth WRAP или OAuth 2.0 (в зависимости от протокола, используемого в запросе маркера).
ACS может выдавать маркеры JWT через протоколы WS-Federation, WS-Trust и OAuth 2.0 (в зависимости от протокола, используемого в запросе маркера).