如何在Vue/Hapi JS应用程序中使用AzureAD进行身份验证
我们在Azure门户上注册了一个应用程序,我们希望在前端使用如何在Vue/Hapi JS应用程序中使用AzureAD进行身份验证,azure,authentication,jwt,azure-active-directory,msal.js,Azure,Authentication,Jwt,Azure Active Directory,Msal.js,我们在Azure门户上注册了一个应用程序,我们希望在前端使用MSAL.js,在后端使用hapi-auth-jwt2和jwks-rsa对用户进行身份验证。后端不是托管在Azure上,而是托管在我们自己的MySQL服务器上 根据这个例子,我们可以使用MSAL.js登录,或者静默登录,或者使用弹出的acquire ID和Access令牌登录。然后,我们将访问令牌连接到http头,如下Vue.prototype.$http.defaults.headers.common['Authorization']
MSAL.js
,在后端使用hapi-auth-jwt2
和jwks-rsa
对用户进行身份验证。后端不是托管在Azure上,而是托管在我们自己的MySQL服务器上
根据这个例子,我们可以使用MSAL.js
登录,或者静默登录,或者使用弹出的acquire ID和Access令牌登录。然后,我们将访问令牌连接到http头,如下Vue.prototype.$http.defaults.headers.common['Authorization']='Bearer'+令牌
,并使用axios
向后端/login
路由发送请求。当我们从我们的客户处点击路由时,jwt
auth策略开始生效,并尝试使用从公众处用jwks-rsa
检索到的密钥对令牌进行解码
问题是来自/login
的响应带有401(未经授权)
和res.headers.www-authenticate:“承载错误=\“无效令牌”
当我们将访问令牌复制/粘贴到jwt.io中时,我们注意到解码的头对象由typ
、nonce
、alg
、x5t
、kid
组成,签名返回时无效。此外,我们的应用程序注册在当前所需权限下选择了Microsoft Graph withUser.Read
,但我们已将其删除
为了测试问题是否存在于我们的JWT策略中,我们将ID令牌传递给Bear,而不是访问令牌。JWT解码了令牌,但返回的响应是res.headers.www-authenticate:“承载错误=\“无效凭据\”
我们的问题是:
解决方案是在内部为我们的API定义一个作用域,然后使用新创建的作用域创建API权限。访问令牌被
hapi-auth-jwt2
成功解码,之后我们在validate()
函数中执行另一个内部级别的身份验证,如果内部身份验证返回正确结果,则返回isValid:true
。希望这对某人有帮助