关于javascript:Azure AD身份验证使用idToken或accessToken失败。我应该使用哪一个?

Azure AD authentication failed using idToken or accessToken. Which one should I use?

在azure活动目录文档中指出:

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应用程序(单页Web应用程序),并尝试获取对我的REST API的accessToken。

我的目标是将来以这种方式将前端的身份验证流与后端分离开来,以便将来一些客户端应用程序可以通过accessTokens访问REST API。

登录时,系统提示我弹出权限弹出窗口,然后在msal.aquireTokenSilent(config)的令牌响应中同时接收到idToken token.idToken.rawIdToken和accessToken token.accessToken

我正在使用带BearerStrategy的passport和passport-azure-ad来验证accessToken作为中间件。如果我将token.accessToken与Authorization Bearer标头一起传递,则会收到authentication failed due to: invalid signature错误。如果我通过了
token.idToken.rawIdToken相反,如果我在承载策略配置中设置了validateIssuer: true,我会收到authentication failed due to: jwt issuer is invalid

首先,我想找出使用??哪个令牌?两者都是有效的jwt令牌(https://jwt.ms/),但它们包含不同的字段。我想到目前为止,idToken听起来似乎很有希望,但是我不确定这是否可行,因为我需要将前端的clientId指定为后端中的Audience字段,否则会抛出authentication failed due to: jwt audience is invalid。所以这不是去多个客户端的方法,对吗?


您可以使用AAD发行的访问令牌来保护自己的自定义Web API。请注意,您必须首先创建一个自定义范围,然后让用户同意该范围。完成此操作后,您的应用程序将获得该范围的令牌(访问令牌是按资源发布的,这意味着您无法使用例如用于MS Graph的令牌来保护自定义Web API。)

在此处查看我的评论以获取更多信息。


我们使用ID令牌检查用户是否已通过身份验证,并获取其帐户详细信息。访问令牌仅用于保护api调用。

您可以阅读有关Azure文档的更多信息,特别是:

ID Tokens should be used to validate that a user is who they claim to be and get additional useful information about them - it shouldn't be used for authorization in place of an access token.

https://docs.microsoft.com/zh-cn/azure/active-directory/develop/id-tokens