Получить UPN и адрес электронной почты из токенов msal 2.0

#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 и проверить это отдельно, чтобы получить больше заявок?

Документы для idToken

Документы для 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 способа получения дополнительных утверждений

  1. Через настройки объявления
  2. При запросе токена, как показано ниже

путем добавления дополнительных областей

 const loginRequest = {
    scopes: ['User.Read', 'email']
};
  

и при проверке токена различные утверждения могут использоваться для получения идентификатора участника путем настройки TokenValidationParameters.NameClaimType