#javascript #c# #active-directory #adal #msal
#javascript #c# #active-directory #adal #msal
Вопрос:
При переключении с adal на библиотеку браузера msal 2.0 мне не хватает UPN пользователя в ответе idToken, что приводит к тому, что у участника нет имени principal.Identity.Name
после передачи idToken на серверную часть. Это было доступно в версии adal.
var principal = tokenHandler.ValidateToken(validationToken, validationParameters, out SecurityToken validatedToken);
Я получаю preferred_name
в качестве претензии, но, похоже, его нельзя использовать для вызова Graph API для получения адреса электронной почты, поскольку это не UPN.
Как мне нужно изменить проверку токена и извлечение UPN для msal в целом? Передать accessToken и проверить это отдельно, чтобы получить больше заявок?
Комментарии:
1. idToken находится в сертификате. Сертификат не загружен или недоступен для пользователя. Сертификат проверяется с использованием виртуального соединения, и соединение может не завершаться. Подозрение заключается в том, что код использует версию TLS по умолчанию, которая равна 1.0 / 1.1, и вам нужно специально добавить версию TLS для использования 1.2 / 1.3. Пять лет назад отрасль решила исключить 1.0 / 1.1 из-за проблем с безопасностью. В июне этого года Microsoft выпустила обновление для системы безопасности, отключающее 1.0 / 1.1 на серверах. В старом примере кода могут отсутствовать обновления для использования 1.2 / 1.3. Сертификат также должен использовать правильный режим шифрования.
2. Извините, мой вопрос мог быть неясным. Я говорю об этом здесь learn.microsoft.com/en-us/azure/active-directory/develop /…
3. В документации неясно, откуда взят ключ. Даже спецификация RCP сбивает с толку ( tools.ietf.org/html/rfc7517 ). JWK — это веб-ключ JSON. Ваша ссылка ссылается на JWT (веб-токен Jason). Я думаю, что токен и ключ одинаковы. Итак, если вы посмотрите на пункт 4.6 RFC 7517, это относится к сертификату. Ключ не обязательно должен поступать из сертификата, но сертификаты являются обычным методом распространения ключей. Ваша документация относится к прикладному уровню, в то время как транспортный уровень использует аутентификацию TLS.
4. У меня такое чувство, что мы говорим о совершенно разных вещах 🙂
5. Нет. Вы смотрите на единственный прикладной уровень, и я знаю, что происходит на более низких уровнях.
Ответ №1:
Оказывается, msal поддерживает 2 способа получения дополнительных утверждений
- Через настройки объявления
- При запросе токена, как показано ниже
путем добавления дополнительных областей
const loginRequest = {
scopes: ['User.Read', 'email']
};
и при проверке токена различные утверждения могут использоваться для получения идентификатора участника путем настройки TokenValidationParameters.NameClaimType