我正在开展一个项目,这是我第一次遇到带有API架构的SPA(以及我的第一个.NET Core项目)。我试图找出认证/授权流程应该如何工作,因为它有点复杂。身份将由OAuth通过本地ADFS提供。 Angular前端重定向到ADFS登录页面,然后使用“code”参数重定向回SPA,然后应用程序将该API发送到API后端的控制器方法。然后,API会回调ADFS并交换令牌的身份验证代码,然后根据签名证书验证令牌。
在这里,我对如何进行有点模糊。 API使用ASP.NET核心标识,我们需要定义将应用于系统用户的“本地”(应用程序)角色。 Angular应用程序需要知道这些角色,所以我想在JWT中将它们传递回客户端。是否可以从ADFS“扩充”令牌以包含其他声明?我是否应该创建并发布与本地用户关联的其他令牌,并在会话期间使用该令牌?
基本上在高级别我感到困惑的是来自IdP的“身份”令牌之间的关系,我将使用它来实际验证用户以及角度应用程序将用于签署其的令牌API请求(我认为还需要对用户进行身份验证)。在一个更简单的模型中,我假设您可以为两者使用相同的模型,但是如果这种情况有任何最佳实践。谢谢!
答案 0 :(得分:0)
“identity”令牌或id_token
用于身份验证。
“访问”令牌或access_token
用于授权。
因此,当您通过ADFS登录时,使用Angular客户端,它将同时返回id_token
和access_token
,而refresh_token
可能取决于为此特定客户端配置的方式。您的ADFS应配置为在access_token
name
,email
,role
等内容中存储您想要的任何声明...
当您使用Angular客户端调用API时,它会将access_token
附加到标头(签署请求)。然后,API必须使用ADFS验证令牌。 API应该问这个客户是否允许访问我?如果是这样,access_token
所声称的任何声明都可以以任何方式使用。您无法使用id_token
对请求进行签名,因为它用于使用ADFS进行身份验证,而不是使用API进行授权。