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

Javascript Azure AD身份验证使用idToken或accessToken失败。我应该用哪一个?,javascript,jwt,azure-active-directory,passport.js,msal,Javascript,Jwt,Azure Active Directory,Passport.js,Msal,在azure active directory文档中,它声明: idToken:id\u令牌作为OpenID连接流的一部分发送到客户端应用程序。它们可以随附或代替访问令牌发送,并由客户端用于验证用户身份。 accessToken:访问令牌使客户端能够安全地调用受Azure保护的API 我正在使用将用户登录到我的vue应用程序(单页web应用程序)并尝试获取REST API的accessToken 我的目标是将前端的身份验证流与后端分离,这样将来几个客户端应用程序可以通过AccessToken访问

在azure active directory文档中,它声明:

idToken:
id\u令牌作为OpenID连接流的一部分发送到客户端应用程序。它们可以随附或代替访问令牌发送,并由客户端用于验证用户身份。

accessToken:
访问令牌使客户端能够安全地调用受Azure保护的API

我正在使用将用户登录到我的vue应用程序(单页web应用程序)并尝试获取REST API的accessToken

我的目标是将前端的身份验证流与后端分离,这样将来几个客户端应用程序可以通过AccessToken访问RESTAPI

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

我正在使用passport和
BealerStrategy
验证accessToken作为中间件。如果我传递带有授权承载头的
token.accessToken
,我将收到一个
身份验证失败,原因是:签名无效
错误。如果我通过考试
token.idToken.rawIdToken
相反,如果我在承载策略配置中设置了
validateIssuer:true
,我会收到
身份验证失败,原因是:jwt颁发者无效


首先,我想知道哪种代币是要使用的?两者都是有效的jwt令牌(),但它们包含不同的字段。我想现在idToken听起来更有希望,但我不确定这是否是一个可行的方法,因为我需要将前端的clientId指定为后端的观众字段,否则它会抛出
身份验证失败,原因是:jwt观众无效
。所以这不是多个客户端的方式,对吗?

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

您可以阅读有关Azure文档的更多信息,具体如下:

ID令牌应用于验证用户是否是他们声称的用户,并获取关于他们的其他有用信息-不应使用它来代替访问令牌进行授权


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


有关更多信息,请参阅我的评论。

谢谢您的回复。正如我所写的,我的目标是保护我的API调用,这意味着我需要accessToken,但它有错误的签名。这就是为什么我感到困惑。我们必须在azure门户的b2c部分中指定大量内容,正确的范围、策略、注册的客户端ID和URL。。是。。。有趣;p@Andre-访问令牌用于保护Azure资源。如果您的目标是保护您自己的资源(API端点),请使用标识令牌。访问令牌是不透明的。不要费心去破译它们。呼叫Azure端点以验证它们。谢谢!这就是我一直在寻找的答案。如果您有自己的API和范围,则必须获得新的accessToken!谢谢