使用SPA的.NET Core WebApi项目中的混合身份验证流程

问题描述 投票:1回答:1

我正在开发一个项目,这是我第一次遇到带有API架构的SPA(以及我的第一个.NET Core项目)。我试图找出认证/授权流程应该如何工作,因为它有点复杂。身份将由OAuth通过本地ADFS提供。 Angular前端重定向到ADFS登录页面,然后使用“code”参数重定向回SPA,然后应用程序将该API发送到API后端的控制器方法。然后,API回调ADFS并交换令牌的auth代码,然后根据签名证书验证令牌。

在这里,我对如何进行有点模糊。 API使用ASP.NET核心标识,我们需要定义将应用于系统用户的“本地”(应用程序)角色。 Angular应用程序需要知道这些角色,所以我想在JWT中将它们传递回客户端。是否可以从ADFS“扩充”令牌以包含其他声明?我是否应该创建并发布与本地用户关联的不同令牌,并在会话期间使用该令牌?

基本上在高层次上我感到困惑的是来自IdP的“身份”令牌与我将用于实际验证用户的令牌之间的关系以及角度应用将用于签署其API请求的令牌(我想这也需要验证用户身份)。在一个更简单的模型中,我假设您可以为两者使用相同的模型,但是如果这种情况有任何最佳实践。谢谢!

angular oauth .net-core asp.net-identity jwt
1个回答
0
投票

“identity”令牌或id_token用于身份验证。

“访问”令牌或access_token用于授权。

因此,当您通过ADFS登录时,使用Angular客户端,它将同时返回id_tokenaccess_token,并且可能refresh_token取决于它是如何为此特定客户端配置的。你的ADFS应配置为存储你想要的access_tokennameemailrole中的任何声明......

当您使用Angular客户端调用API时,它会将access_token附加到标头(签署请求)。然后,API必须使用ADFS验证令牌。 API应该问这个客户是否允许访问我?如果是这样,access_token所声称的任何声明都可以以任何方式使用。您无法使用id_token对请求进行签名,因为它用于使用ADFS进行身份验证,而不是使用API​​进行授权。

© www.soinside.com 2019 - 2024. All rights reserved.