Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Это важно
Начиная с 1 мая 2025 г. Azure AD B2C больше не будет доступен для приобретения для новых клиентов. Дополнительные сведения см. в разделе "Вопросы и ответы".
Маркер доступа содержит утверждения, которые можно использовать в Azure Active Directory B2C (Azure AD B2C) для идентификации предоставленных разрешений для API. Чтобы вызвать сервер ресурсов, HTTP-запрос должен включать маркер доступа. Маркер доступа обозначается как access_token в ответах из Azure AD B2C.
В этой статье показано, как запросить маркер доступа для веб-приложения и веб-API. Дополнительные сведения о токенах в Azure AD B2C см. в обзоре токенов в Azure Active Directory B2C.
Замечание
Цепочки веб-API (вBehalf-Of) не поддерживаются Azure AD B2C - Многие архитектуры включают веб-API, который должен вызывать другой веб-API на нижележащем уровне, и оба защищены Azure AD B2C. Этот сценарий распространен в клиентах с серверной частью веб-API, которая, в свою очередь, вызывает другую службу. Этот сценарий цепочного веб-API может поддерживаться с помощью гранта учётных данных носителя JWT OAuth 2.0, также известного как поток "On-Behalf-Of". Однако поток on-Behalf-Of в настоящее время не реализован в Azure AD B2C. Хотя On-Behalf-Of работает для приложений, зарегистрированных в Microsoft Entra ID, он не работает для приложений, зарегистрированных в Azure AD B2C, независимо от арендатора (Microsoft Entra ID или Azure AD B2C), который выдает токены.
Предпосылки
- Создайте поток пользователя , чтобы пользователи могли зарегистрироваться и войти в приложение.
- Если вы еще этого не сделали, добавьте приложение веб-API в клиент Azure Active Directory B2C.
Области применения
Области предоставляют способ управления разрешениями для защищенных ресурсов. При запросе маркера доступа клиентское приложение должно указать требуемые разрешения в параметре области запроса. Например, чтобы указать значениеread области для API с URIhttps://contoso.onmicrosoft.com/apiидентификатора приложения, область будет иметь значение https://contoso.onmicrosoft.com/api/read.
Области используются веб-API для реализации управления доступом на основе областей. Например, у пользователей веб-API может быть доступ на чтение и запись, или у пользователей веб-API может быть только доступ на чтение. Чтобы получить несколько разрешений в одном запросе, можно добавить несколько записей в параметр одной области запроса, разделенных пробелами.
В следующем примере показаны области, декодированные в URL-адресе:
scope=https://contoso.onmicrosoft.com/api/read openid offline_access
В следующем примере показаны области, закодированные в URL-адресе:
scope=https%3A%2F%2Fcontoso.onmicrosoft.com%2Fapi%2Fread%20openid%20offline_access
Если вы запрашиваете больше областей, чем предоставленные для клиентского приложения, вызов завершается успешно, если предоставлено хотя бы одно разрешение. Утверждение scp в полученном токене доступа заполняется только теми разрешениями, которые были успешно предоставлены.
Области применения OpenID Connect
Стандарт OpenID Connect задает несколько специальных значений области. Следующие области представляют разрешение на доступ к профилю пользователя:
- openid — запрашивает маркер идентификатора.
- offline_access — Запрос маркера обновления с помощью потоков авторизационного кода.
- 00000000-0000-0000-0000-000000000000 - Использование идентификатора клиента в качестве области указывает, что вашему приложению необходим маркер доступа, который может быть использован против вашей службы или веб-API, представленных тем же идентификатором клиента.
Если параметр response_type в запросе включает /authorize, параметр token должен включать по крайней мере одну область ресурсов, кроме и openid, которая будет предоставлена. В противном случае запрос завершается ошибкой /authorize .
Запрос токена
Чтобы запросить маркер доступа, требуется код авторизации. Ниже приведен пример запроса к /authorize конечной точке для кода авторизации:
GET https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/authorize?
client_id=<application-ID>
&nonce=anyRandomValue
&redirect_uri=https://jwt.ms
&scope=<application-ID-URI>/<scope-name>
&response_type=code
Замените значения в строке запроса следующим образом:
-
<tenant-name>— имя клиента Azure AD B2C. Если вы используете пользовательский домен, заменитеtenant-name.b2clogin.comна ваш домен, напримерcontoso.com. -
<policy-name>— имя настраиваемой политики или потока пользователя. -
<application-ID>— Идентификатор веб-приложения, которое вы зарегистрировали для поддержки потока пользователя. -
<application-ID-URI>— URI идентификатора приложения, заданный в колонке "Предоставление API " клиентского приложения. -
<scope-name>— Имя области, добавленной в колонке "Предоставление API " клиентского приложения. -
<redirect-uri>— URI перенаправления , введенный при регистрации клиентского приложения.
Чтобы получить представление о том, как работает запрос, вставьте запрос в браузер и запустите его.
Это интерактивная часть потока, где вы принимаете меры. Вам будет предложено завершить рабочий процесс потока пользователя. Это может потребовать ввода имени пользователя и пароля в форме входа или любого другого количества шагов. Действия, которые необходимо выполнить, зависят от того, как определен поток пользователя.
Ответ с кодом авторизации должен быть похож на этот пример:
https://jwt.ms/?code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMC...
После успешного получения кода авторизации вы можете использовать его для запроса токена доступа. Параметры находятся в тексте HTTP-запроса POST:
POST <tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/token HTTP/1.1
Host: <tenant-name>.b2clogin.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&client_id=<application-ID>
&scope=<application-ID-URI>/<scope-name>
&code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMC...
&redirect_uri=https://jwt.ms
&client_secret=2hMG2-_:y12n10vwH...
Если вы хотите протестировать этот HTTP-запрос POST, можно использовать любой HTTP-клиент, например Microsoft PowerShell.
Успешный ответ токена выглядит следующим образом:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrN...",
"token_type": "Bearer",
"not_before": 1549647431,
"expires_in": 3600,
"expires_on": 1549651031,
"resource": "f2a76e08-93f2-4350-833c-965c02483b11",
"profile_info": "eyJ2ZXIiOiIxLjAiLCJ0aWQiOiJjNjRhNGY3ZC0zMDkxLTRjNzMtYTcyMi1hM2YwNjk0Z..."
}
При использовании https://jwt.ms для проверки возвращаемого маркера доступа вы увидите примерно следующее:
{
"typ": "JWT",
"alg": "RS256",
"kid": "X5eXk4xyojNFum1kl2Ytv8dl..."
}.{
"iss": "https://contoso0926tenant.b2clogin.com/c64a4f7d-3091-4c73-a7.../v2.0/",
"exp": 1549651031,
"nbf": 1549647431,
"aud": "f2a76e08-93f2-4350-833c-965...",
"oid": "1558f87f-452b-4757-bcd1-883...",
"sub": "1558f87f-452b-4757-bcd1-883...",
"name": "David",
"tfp": "B2C_1_signupsignin1",
"nonce": "anyRandomValue",
"scp": "read",
"azp": "38307aee-303c-4fff-8087-d8d2...",
"ver": "1.0",
"iat": 1549647431
}.[Signature]
Дальнейшие шаги
- Узнайте, как настроить токены в Azure AD B2C