我们在 Azure 门户上注册了一个应用程序,我们希望MSAL.js
在前端和后端hapi-auth-jwt2
使用jwks-rsa
来对用户进行身份验证。后端不是托管在 Azure 上,而是托管在我们自己的 MySQL 服务器上。
根据这个示例active-directory-b2c-javascript-msal-singlepageapp,我们可以使用MSAL.js
静默方式或弹出窗口来登录并获取 ID 和访问令牌。然后,我们像这样将访问令牌附加到 http 标头,并向我们的后端路由Vue.prototype.$http.defaults.headers.common['Authorization'] = 'Bearer ' + token
发送请求。当我们从客户端访问路由时,身份验证策略会启动并尝试使用从公共https://login.microsoftonline.com/common/discovery/keys检索到的密钥来解码令牌。axios
/login
jwt
jwks-rsa
问题是/login
来自的响应带有一个401 (Unauthorized)
和res.headers.www-authenticate: "Bearer error=\"Invalid token\""
。
当我们将访问令牌复制/粘贴到 jwt.io 中时,我们注意到我们解码的标头对象由typ
、nonce
、alg
、组成x5t
,kid
并且签名返回为无效。此外,我们的应用程序注册User.Read
当前已在所需权限下选择了 Microsoft Graph,但我们将其删除。
为了测试问题是否出在我们的 JWT 策略中,我们将 ID 令牌而不是访问令牌传递给了 Bearer。JWT 解码了令牌,但响应返回res.headers.www-authenticate: "Bearer error=\"Invalid credentials\""
我们的问题是:
- 是否可以在不调用 Graph API 的情况下验证访问令牌,我们如何做到这一点?
- 如果上述方法不可行,我们可以使用 ID 令牌对用户进行身份验证吗?这将如何工作?
- 如果我们可以在不调用 Graph API 的情况下验证访问令牌,那么https://portal.azure.com/中的设置应该是什么?