Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Vue/Hapi JS应用程序中使用AzureAD进行身份验证_Azure_Authentication_Jwt_Azure Active Directory_Msal.js - Fatal编程技术网

如何在Vue/Hapi JS应用程序中使用AzureAD进行身份验证

如何在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']

我们在Azure门户上注册了一个应用程序,我们希望在前端使用
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 with
User.Read
,但我们已将其删除

为了测试问题是否存在于我们的JWT策略中,我们将ID令牌传递给Bear,而不是访问令牌。JWT解码了令牌,但返回的响应是
res.headers.www-authenticate:“承载错误=\“无效凭据\”

我们的问题是:

  • 是否可以在不调用Graph API的情况下验证访问令牌?我们如何做到这一点
  • 如果无法实现上述功能,我们是否可以使用ID令牌对用户进行身份验证,这将如何工作
  • 如果我们可以在不调用Graph API的情况下验证访问令牌,那么其中的设置应该是什么

  • 解决方案是在内部为我们的API定义一个作用域,然后使用新创建的作用域创建API权限。访问令牌被
    hapi-auth-jwt2
    成功解码,之后我们在
    validate()
    函数中执行另一个内部级别的身份验证,如果内部身份验证返回正确结果,则返回
    isValid:true
    。希望这对某人有帮助