我有一个前端SPA(单页应用程序)和后端API。
SPA中的每个事件(如按钮单击)调用相应的API端点,并在SPA中显示结果。
我希望实现基于Azure AD的身份验证,以便只有我的Azure租户用户能够使用SPA/API。
以下流程是否是实现此类功能的正确方法:
1.用户打开SPA
1.用户点击登录按钮,打开Microsoft登录弹出窗口
1.用户在弹出窗口中输入Microsoft凭据,如果凭据正确,则用户将获得JWT标记
1.对于每个后续的API请求,JWT标记都被放置在bearer头中
1.端点使用Azure公钥验证JWT令牌,如果令牌丢失或验证失败,则拒绝请求。
这个流程正确吗?这种流程叫什么?
2条答案
按热度按时间eanckbw91#
在获得所描述的流程之前,需要执行以下几个实施步骤:
我强烈建议配置一个Azure示例实现end 2 end,以了解所有需要的任务:https://learn.microsoft.com/en-us/azure/active-directory-b2c/configure-authentication-sample-spa-app
ego6inou2#
您概述的步骤是正确的。
OAuth 2.0“流程”概述了从身份提供者获取令牌的步骤(IdP)。由于您使用的是SPA,因此对可以使用的流有一些限制。SPA不能充当某些流所需的“机密客户端”。(基本上-其它流所需的客户端密码将在浏览器网络跟踪中可见,因此它不是“机密的”。)“隐式流”曾经被推荐用于SPA,但是它不太安全,所以现在推荐“授权代码流(使用PKCE)”。上述问题中的步骤2和3是当您执行该流以获取令牌时。
身份验证流并没有真正解决如何保存令牌以及如何将令牌发送到API(问题中的第4个问题),但Microsoft身份验证库(MSAL)可以帮助解决这一问题-更多信息,请单击此处-https://learn.microsoft.com/en-us/azure/active-directory/develop/scenario-spa-overview
在Azure AD中,您需要2个应用程序注册-一个用于您的SPA,一个用于您的API。API应用程序注册需要“公开API”,这实际上意味着定义一个范围。您的SPA应用程序注册需要向您从API应用程序注册中定义的范围添加“API权限”。(它将显示在“我的API”中。)此关系就是问题中第5条的实施方式。
在Azure AD和Azure B2C中设置身份验证的许多步骤相似,但Azure AD旨在对属于你的组织的用户进行身份验证。Azure B2C允许你生成一组不属于特定Azure AD组织的用户。