Я добавил рабочий корпоративный логин (EntraId) для своей компании в Azure AD B2C с настраиваемыми политиками. Теперь я могу войти в систему и добавить токен доступа к утверждениям, которые я отправил с моими API-вызовами Microsoft Learn.
Я извлекаю этот токен из заявок моего id-токена b2c-iss и добавляю его в заголовок своих запросов. В ответ получаю 401 (Неавторизованный) с описанием:
Ошибка аутентификации: IDX10511: проверка подписи не удалась. Ключи попробовал: '[PII типа 'System.Text.StringBuilder' скрыт. Для большего подробности см. https://aka.ms/IdentityModel/PII.]'.
Это токен, который я получаю:
{
"typ": "JWT",
"nonce": "<some id>",
"alg": "RS256",
"x5t": "<some id>",
"kid": "<some id>"
}.{
"aud": "00000003-0000-0000-c000-000000000000",
"iss": "https://sts.windows.net/<tenantId>/",
"iat": <some data>,
"nbf": <some data>,
"exp": <some data>,
"acct": 0,
"acr": "1",
"aio": "<some id>",
"amr": [
"pwd"
],
"app_displayname": "<display name>",
"appid": "<app id>",
"appidacr": "1",
"family_name": "<my family name>",
"given_name": "<my given name>",
"idtyp": "user",
"ipaddr": "<ip address>",
"name": "<my name>",
"oid": "<object id>",
"onprem_sid": "<some id>",
"platf": "3",
"puid": "<some id>",
"rh": "0.xy.",
"scp": "email openid profile User.Read",
"signin_state": [
"inknownntwk",
"kmsi"
],
"sub": "<some id>",
"tenant_region_scope": "EU",
"tid": "<tenant id>",
"unique_name": "<email>",
"upn": "<email>",
"uti": "<some id>",
"ver": "1.0",
"wids": [
"<some id>"
],
"xms_idrel": "1 10",
"xms_st": {
"sub": "<some id>"
},
"xms_tcdt": <some int>,
"xms_tdbr": "EU"
}.[Signature]
Что я делаю не так?
Я много искал на некоторых форумах, но не получил никакого ответа. Я сталкиваюсь с этой ошибкой уже несколько дней и не могу найти ничего, что помогло бы устранить конкретную ошибку.
Следовательно, не проверяйте токены API Microsoft Graph и не вызывайте API.
@Rukmini спасибо за ваш комментарий! Но какой токен мне тогда добавить в запрос? Какие-либо предложения?
Какой API вы хотите вызвать?
API-интерфейс микросервиса (из моей компании), который вызывается при каждом запросе для проверки токена, но (как я уже говорил) терпит неудачу. Извините за путаницу — я совершенно новичок во всей этой штуке с проверкой токенов.
После создания токена доступа вы хотите вызвать API Microsoft Graph или собственный API?
@Rukmini Нет, мне это пока не нужно - может быть, в будущем.
Итак, ваша цель — просто сгенерировать токен доступа для области Microsoft Graph Api?
Вы тоже проверили это stackoverflow.com/questions/76009655/…??
Не совсем - мои веб-API защищены через Azure, и я хочу аутентифицировать свои запросы - когда я вхожу в систему как сотрудник компании (а не как обычный пользователь), я делаю это с помощью своего корпоративного входа и получаю ключ доступа от этого idp. . И да, я на этом - похоже, это может мне помочь - я попробую. Большое спасибо!
Могу ли я опубликовать это как ответ?
Я попробую сегодня вечером на своей тестовой среде и сообщу вам завтра. Конечно, вы можете опубликовать это как ответ и получить баллы, если это сработает :) Большое спасибо!
Дайте мне знать, если это сработает, как только оно будет решено, я опубликую это как ответ.
Вам следует запросить токен, используя область, определенную для вашего API на странице Expose API при регистрации вашего приложения. Таким образом, вы получите токен доступа для вашего API, который вы сможете проверить.
@juunas Как мне тогда ввести это в свой B2C? <Item Key = "scope">api://clientId/myEndpoint</Item>?
@SCH361 Проверьте это прицел должен быть такой
В примере показан <Item Key = "scope">openid profile</Item>, поэтому туда нужно добавить что-то вроде: <Item Key = "scope">openid profile api://clientId/myEndpoint</Item>
Область openid и профиля запрашивает токен идентификатора, который необходим AAD B2C для заполнения утверждений. При добавлении области API дополнительно запрашивается токен доступа для API.
Должно быть <Item Key = "scope">https://Tenant.onmicrosoft.com/XXX/Enpoint</Item> для b2c @SCH361
Кажется, я получаю токен идентификатора с действительным токеном доступа с вашей областью действия @juunas! Спасибо большое, ребята, очень ценю это! @Rukmini, ты можешь опубликовать свой ответ, и я приму его!


Обратите внимание: токен доступа с aud 00000003-0000-0000-c000-000000000000 или https://graph.microsoft.com предназначен для Microsoft Graph API, не следует проверять, поскольку токен не предназначен для приложения.
Я получил ту же ошибку при декодировании токена API Microsoft Graph:


Следовательно, не проверяйте токены API Microsoft Graph и не вызывайте API.
Проверке подлежат только токены, созданные для приложения путем предоставления API и предоставления разрешений.

И предоставить разрешения API:

Создайте токен доступа, передав область как https://b2c.onmicrosoft.com/xxx/Endpoint openid offline_access, и подтвердите область, как показано ниже:
<Item Key = "scope">https://b2c.onmicrosoft.com/XXX/Enpoint</Item>
Ссылка:
jwt — использование идентификатора клиента Azure AD и действующего токена, выданного для «регистрации приложения». Проверка подписи не удалась - Stack Overflow на русском
Токен доступа с aud
00000003-0000-0000-c000-000000000000илиhttps://graph.microsoft.comпредназначен для Microsoft Graph API, не следует проверять, поскольку токен не предназначен для приложения.