Azure Аутентификация AD не удалась с использованием idToken или accessToken. Какой из них я должен использовать? - PullRequest
0 голосов
/ 15 января 2020

В документации azure Active Directory указано:

idToken: id_tokens are sent to the client application as part of an OpenID Connect flow. They can be sent along side or instead of an access token, and are used by the client to authenticate the user.

accessToken: Access tokens enable clients to securely call APIs protected by Azure

Я использую msal , чтобы войти в мое приложение vue (одностраничное веб-приложение) и попытаться получить accessToken для моего REST API.

Моя цель состоит в том, чтобы таким образом отделить поток аутентификации внешнего интерфейса от внутреннего интерфейса. в будущем несколько клиентских приложений смогут получить доступ к REST API через accessTokens.

При входе в систему мне предлагается всплывающее окно с разрешением, после чего я получаю idToken token.idToken.rawIdToken и accessToken token.accessToken в ответе токена msal.aquireTokenSilent(config).

Я использую паспорт и passport- azure -ad с BearerStrategy для проверки accessToken в качестве промежуточного программного обеспечения. Если я передаю token.accessToken с заголовком Authorization Bearer, я получаю ошибку authentication failed due to: invalid signature. Если вместо этого я передам token.idToken.rawIdToken, я получу authentication failed due to: jwt issuer is invalid, если я установлю validateIssuer: true в конфигурации стратегии переноса.

Сначала я хочу выяснить, какой токен будет использоваться? Оба являются действительными токенами jwt (https://jwt.ms/), но они содержат разные поля. Я думаю, на данный момент idToken звучит более многообещающе, но я не уверен, что это путь к go, так как мне нужно было бы указать clientId внешнего интерфейса в качестве поля аудитории в бэкэнде, в противном случае он выдает authentication failed due to: jwt audience is invalid , Так что это не путь к go для нескольких клиентов, верно?

Ответы [ 2 ]

1 голос
/ 15 января 2020

Вы можете использовать токены доступа, выпущенные AAD, для защиты своих собственных веб-API. Обратите внимание, что сначала необходимо создать настраиваемую область, а затем дать согласие пользователя на эту область. Как только вы это сделаете, вашему приложению будет выдан токен для этой области (токены доступа выдаются для каждого ресурса, что означает, что вы не можете защитить свой пользовательский веб-API с помощью токена, предназначенного, например, для MS Graph).

См. Мой комментарий здесь для получения дополнительной информации.

0 голосов
/ 15 января 2020

Мы используем идентификационные токены, чтобы проверить, аутентифицирован ли пользователь или нет, и получить данные его учетной записи. Токен доступа используется только для защиты вызовов API.

Вы можете прочитать больше в документации Azure, а именно:

Идентификационные токены должны использоваться для подтверждения того, что пользователь является тем, кем он себя считает, и получения дополнительной полезной информации о нем. - его нельзя использовать для авторизации вместо токена доступа.

https://docs.microsoft.com/en-us/azure/active-directory/develop/id-tokens

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...