Форматы токенов, поддерживаемые в 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/>.

Аудитория

Значение applies_to используется для запроса токена. Возможные значения: HTTP или HTTPS URI.

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 (в зависимости от протокола, используемого в запросе маркера).

См. также:

Основные понятия

Архитектура ACS
Компоненты ACS 2.0