【问题标题】:How to use AzureAD for authentication in Vue / Hapi JS App如何在 Vue / Hapi JS App 中使用 AzureAD 进行身份验证
【发布时间】:2020-01-31 18:50:27
【问题描述】:

我们在 Azure 门户上注册了一个应用程序,我们希望在前端使用 MSAL.js,在后端使用 hapi-auth-jwt2jwks-rsa 来验证用户身份。后端不是托管在 Azure 上,而是托管在我们自己的 MySQL 服务器上。

根据此示例active-directory-b2c-javascript-msal-singlepageapp,我们可以使用MSAL.js 进行登录,并以静默方式或弹出窗口获取ID 和访问令牌。然后,我们将 访问令牌 附加到像 Vue.prototype.$http.defaults.headers.common['Authorization'] = 'Bearer ' + token 这样的 http 标头,并将带有 axios 的请求发送到我们的后端 /login 路由。当我们从客户端访问路由时,jwt 身份验证策略会启动并尝试使用从公共https://login.microsoftonline.com/common/discovery/keys 检索到的通过jwks-rsa 检索到的密钥来解码令牌。

问题是来自/login 的响应带有401 (Unauthorized)res.headers.www-authenticate: "Bearer error=\"Invalid token\""

当我们将访问令牌复制/粘贴到 jwt.io 中时,我们注意到我们解码的标头对象由 typnoncealgx5tkid 组成,并且签名返回为无效.此外,我们的应用注册当前在所需权限下选择了带有 User.Read 的 Microsoft Graph,但我们将其删除。

为了测试问题是否出在我们的 JWT 策略中,我们将 ID 令牌而不是访问令牌传递给了 Bearer。 JWT 解码了令牌,但返回的响应是 res.headers.www-authenticate: "Bearer error=\"Invalid credentials\""

我们的问题是:

  1. 是否可以在不调用 Graph API 的情况下验证访问令牌,我们如何做到这一点?
  2. 如果上述方法不可行,我们可以使用 ID 令牌对用户进行身份验证吗?这将如何工作?
  3. 如果我们可以在不调用 Graph API 的情况下验证访问令牌,https://portal.azure.com/ 中的设置应该是什么?

【问题讨论】:

    标签: azure authentication jwt azure-active-directory msal.js


    【解决方案1】:

    解决方案是在https://portal.azure.com 中为我们的 API 定义一个范围,然后使用新创建的范围创建 API 权限。访问令牌由hapi-auth-jwt2 成功解码,之后我们在validate() 函数中进行了另一个内部级别的身份验证,如果内部身份验证返回正确的结果,则返回isValid: true。希望这可以帮助某人

    【讨论】:

      猜你喜欢
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 2019-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多