Node.js 使用授权码授权的前端VueJS(或React或Angular)应用程序的身份验证体系结构

Node.js 使用授权码授权的前端VueJS(或React或Angular)应用程序的身份验证体系结构,node.js,vue.js,oauth,azure-active-directory,single-sign-on,Node.js,Vue.js,Oauth,Azure Active Directory,Single Sign On,我正在开发一个应用程序,其中前端是VueJS,后端是NodeJS和ExpressJS NodeJS、ExpressJS将托管RESTAPI,我想使用Azure AD保护它们。我想使用身份验证代码流 我的问题是:我已经把我的想法放在图表中了,这是正确的方法吗 我觉得这种方法不错。我认为它是基于JWT()的身份验证的高级版本。有关JWT,请参见以下步骤: 客户端通过提供凭据请求身份验证 服务器向客户端提供使用服务器中存在的私钥加密的令牌 JWT存储在客户机的会话中,并在客户机向其请求需要身份验证的内

我正在开发一个应用程序,其中前端是VueJS,后端是NodeJS和ExpressJS

NodeJS、ExpressJS将托管RESTAPI,我想使用Azure AD保护它们。我想使用身份验证代码流

我的问题是:我已经把我的想法放在图表中了,这是正确的方法吗


我觉得这种方法不错。我认为它是基于JWT()的身份验证的高级版本。有关JWT,请参见以下步骤:

  • 客户端通过提供凭据请求身份验证
  • 服务器向客户端提供使用服务器中存在的私钥加密的令牌
  • JWT存储在客户机的会话中,并在客户机向其请求需要身份验证的内容时发送到服务器
  • 然后,服务器使用公钥/私钥解密令牌,并将响应发送回客户端
  • 此时将验证会话
  • 使用您上面描述的体系结构,除了加密(生成)和解密(验证)Azure AD中存在的令牌的方法外,它执行完全相同的操作。以下是基于您的体系结构实现身份验证的步骤:

  • 客户端通过提供凭据请求身份验证
  • Azure AD服务器做了一件类似2FA的事情,但最终提供了令牌(相当于前面方法中的JWT)
  • 令牌存储在客户机的会话中,并在客户机向其请求需要身份验证的内容时发送到应用程序后端服务器
  • 后端服务器使用Azure AD验证令牌(类似于JWT的解密/验证步骤),并将响应发送回客户端
  • 此时将验证会话
  • 不过,我建议对此做一点小小的改变。如果你看上面的第4步。每次需要验证会话时,应用程序服务器都会不断点击Azure AD。如果您可以在此阶段添加一个实际的JWT,它可能有助于避免这些对Azure的冗余调用

    因此,上述针对JWT的步骤可能会添加到上述Azure AD的第4步之后,即创建JWT并在Azure验证所有内容后将其存储在客户端会话中,然后在将来继续使用基于JWT的身份验证进行当前会话

    如果需要,JWT可以存储在浏览器cookie中,并且在特定时间段内完全可以避免调用Azure AD。然而,我们的目标不是减少Azure AD服务器上的负载,而是建议在这种特定情况下使用JWT

    我希望有帮助