Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Платформа удостоверений Майкрософт позволяет приложению использовать для проверки подлинности свои собственные учетные данные везде, где может использоваться секрет клиента, например в потоке предоставления учетных данных клиента OAuth 2.0 и потоке On-Behalf-Of (OBO).
Одной из форм учетных данных, которые приложение может использовать для аутентификации, является утверждение JSON Web Token (JWT), подписанное с помощью сертификата приложения. Описание доступно в спецификации OpenID Connect для параметра проверки подлинности клиента private_key_jwt
.
Если вы заинтересованы в использовании JWT, выданного другим поставщиком удостоверений, в качестве учетных данных для приложения, см. сведения в статье Федерация удостоверений рабочей нагрузки для настройки политики федерации.
Формат утверждения
Чтобы вычислить утверждение, можно использовать одну из множества библиотек JWT на удобном для вас языке (для этого в MSAL используется .WithCertificate()
). Эти данные переносятся маркером в заголовке, утверждениях и сигнатуре.
Верхний колонтитул
Параметр | Комментарий |
---|---|
alg |
Должен быть PS256 |
typ |
Должен иметь значение JWT |
x5t#S256 |
Отпечаток SHA-256 в кодировке Base64url для кодировки DER сертификата X.509. |
Утверждения (полезные данные)
Тип утверждения | значение | Описание |
---|---|---|
aud |
https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token |
Утверждение "aud" (аудитория) определяет получателей, для которым предназначен JWT (здесь идентификатор Microsoft Entra) См . раздел RFC 7519, раздел 4.1.3. В этом случае получатель является сервером входа (login.microsoftonline.com ). |
exp |
1601519414 | Утверждение exp (время окончания срока действия) указывает время окончания срока действия или время, начиная с которого маркер JWT не должен приниматься в обработку. См. раздел 4.1.4 RFC 7519. Утверждение может быть использовано в течение установленного срока, поэтому не делайте его слишком большим (не более 5–10 мин после nbf ). Идентификатор Microsoft Entra не помещает ограничения на exp время в данный момент. |
iss |
{Идентификатор клиента} | Утверждение "iss" (издатель) обозначает субъект, который выдал JWT (в данном случае — клиентское приложение). Используйте идентификатор приложения GUID. |
jti |
(идентификатор GUID) | Утверждение jti (идентификатор маркера JWT) предоставляет уникальный идентификатор JWT. Значение идентификатора должно быть назначено таким образом, чтобы гарантировать, что существует незначимая вероятность того, что одно и то же значение будет случайно назначено другому объекту данных; если приложение использует несколько издателей, столкновения должны быть предотвращаться среди значений, созданных различными издателями, а также. Значение "jti" является строкой с учетом регистра. RFC 7519, раздел 4.1.7 |
nbf |
1601519114 | Утверждение "nbf" (не ранее) определяет время, до которого маркер JWT НЕ ДОЛЖЕН приниматься в обработку. RFC 7519, раздел 4.1.5 Допускается использование текущего времени. |
sub |
{Идентификатор клиента} | Утверждение "sub" (субъект) обозначает субъект JWT, в данном случае — также ваше приложение. Используйте то же значение, что и для iss . |
iat |
1601519114 | Утверждение iat (время выдачи) обозначает время, в которое был создан токен JWT. Это утверждение можно использовать для оценки возраста конкретного токена JWT. RFC 7519, раздел 4.1.5 |
Подпись
Подпись формируется путем применения сертификата, как описано в спецификации RFC 7519 на JSON Web Token. Используйте заполнение PSS.
Пример декодированного утверждения JWT
{
"alg": "PS256",
"typ": "JWT",
"x5t#S256": "A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u"
}
.
{
"aud": "https: //login.microsoftonline.com/contoso.onmicrosoft.com/oauth2/v2.0/token",
"exp": 1484593341,
"iss": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"jti": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"nbf": 1484592741,
"sub": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
}
.
"A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u..."
Пример закодированного утверждения JWT
Ниже приводится строка, которая является примером закодированного утверждения. Если внимательно ее изучить, то можно заметить, что она состоит из трех частей, разделенных точками (.
).
- В первом разделе закодирован заголовок.
- Во втором разделе закодированы утверждения (полезные данные).
- Последний раздел является сигнатурой, вычисленной с помощью сертификатов из содержимого первых двух разделов.
"eyJhbGciOiJQUzI1NiIsIng1dCNTMjU2IjoiZ3g4dEd5c3lqY1JxS2pGUG5kN1JGd3Z3WkkwIn0.eyJhdWQiOiJodHRwczpcL1wvbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbVwvam1wcmlldXJob3RtYWlsLm9ubWljcm9zb2Z0LmNvbVwvb2F1dGgyXC90b2tlbiIsImV4cCI6MTQ4NDU5MzM0MSwiaXNzIjoiOTdlMGE1YjctZDc0NS00MGI2LTk0ZmUtNWY3N2QzNWM2ZTA1IiwianRpIjoiMjJiM2JiMjYtZTA0Ni00MmRmLTljOTYtNjVkYmQ3MmMxYzgxIiwibmJmIjoxNDg0NTkyNzQxLCJzdWIiOiI5N2UwYTViNy1kNzQ1LTQwYjYtOTRmZS01Zjc3ZDM1YzZlMDUifQ.
Gh95kHCOEGq5E_ArMBbDXhwKR577scxYaoJ1P{a lot of characters here}KKJDEg"
Зарегистрируйте сертификат на платформе удостоверений Майкрософт
Учетные данные сертификата можно связать с клиентским приложением в платформа удостоверений Майкрософт через Центр администрирования Microsoft Entra с помощью любого из следующих методов:
Отправка файла сертификата
На вкладке Регистрация приложений клиентского приложения:
- Выберите Сертификаты и секреты>Сертификаты.
- Выберите " Отправить сертификат" и выберите файл сертификата для отправки.
- Выберите Добавить. После передачи сертификата отображаются значения отпечатка сертификата, даты начала и истечения срока действия.
Обновление манифеста приложения
После получения сертификата вычислите следующие значения:
-
$base64Thumbprint
— значение хэша сертификата в кодировке Base64. -
$base64Value
— значение необработанных данных сертификата в кодировке Base64.
В качестве ключа в манифесте приложения ($keyId
) предоставьте идентификатор GUID.
При регистрации приложения Azure для клиентского приложения сделайте следующее.
Щелкните Манифест, чтобы открыть манифест приложения.
Выберите манифест приложения Microsoft Graph.
Замените свойство keyCredentials данными нового сертификата, используя приведенную ниже схему.
"keyCredentials": [ { "customKeyIdentifier": "$base64Thumbprint", "keyId": "$keyid", "type": "AsymmetricX509Cert", "usage": "Verify", "key": "$base64Value" } ]
Сохраните изменения в манифесте приложения и передайте его на платформу удостоверений Майкрософт.
Свойство
keyCredentials
является многозначным, поэтому для расширенного управления ключами можно передать несколько сертификатов.
Использование утверждения клиента
Утверждения клиента можно использовать в любом месте, где может применяться секрет клиента. Например, в потоке кода авторизации можно передать подтверждение client_secret
того, что запрос поступает из приложения. Его можно заменить параметрами client_assertion
и client_assertion_type
.
Параметр | значение | Описание |
---|---|---|
client_assertion_type |
urn:ietf:params:oauth:client-assertion-type:jwt-bearer |
Это фиксированное значение, указывающее, что вы используете учетные данные сертификата. |
client_assertion |
JWT |
Созданный выше JWT. |
Следующие шаги
Библиотека MSAL.NET обслуживает этот сценарий в одной строке кода.
Консольное приложение управляющей программы .NET с помощью примера кода платформа удостоверений Майкрософт на GitHub показывает, как приложение использует собственные учетные данные для проверки подлинности. В нем также показано, как создать самозаверяющий сертификат с помощью командлета PowerShell New-SelfSignedCertificate
. Вы также можете воспользоваться скриптами создания приложений для создания сертификатов, вычисления отпечатков и т. д.