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

时间:2018-03-03 05:44:29

标签: angular oauth .net-core asp.net-identity jwt

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

因此,当您通过ADFS登录时,使用Angular客户端,它将同时返回id_tokenaccess_token,而refresh_token可能取决于为此特定客户端配置的方式。您的ADFS应配置为在access_token nameemailrole等内容中存储您想要的任何声明...

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