我可以信任来自授权路线的ClaimsPrincipal

时间:2017-11-21 22:37:57

标签: asp.net-identity asp.net-core-2.0 asp.net-core-webapi openiddict

我正在使用OpenIdDict和Aspnet核心2.0身份。我已配置(现在)使用密码流(资源所有者密码凭据授予)。客户是我制作的Angular SPA。我可以控制客户端和服务器。

我目前正在编写一个自定义的AuthorizationHandler,它到目前为止运行良好。

然而,我有点担心我的ClaimsPrincipal。 我的安全WebAPI方法使用授权属性

进行修饰
[Authorize(AuthenticationSchemes = AuthValidationDefaults.AuthenticationScheme)] 

根据我的理解,如果我向我的授权添加一个策略,我获得的上下文与我的控制器中的上下文相同。它有一个“用户”属性,我可以称之为“HasClaims”。

我已向我的校长添加了一些“许可”类型的声明,他们确实出现了。

这个ClaimPrincipals是通过解码从SPA传递的承载令牌来构建的吗?如果是这样,相信这个声明列表在服务器端做任何事情似乎是不安全的......但是,不记名令牌是access_token而不是id_token,并且不能简单地在https://jwt.io/上解码

我可以使用UserManager / RoleManager获取登录用户的所有声明(服务器端),然后使用该列表进行防范。但是,我担心这样做会出现性能问题......

所以,我想知道我获得的ControllerPrincipals(作为User属性)是否值得信任,或者我是否应该自己获得索赔。

1 个答案:

答案 0 :(得分:1)

  

所以,我想知道我获得的ControllerPrincipals(作为User属性)是否可信。

是的。默认情况下,OpenIddict使用ASP.NET Core Data Protection和ASP.NET Core提供的身份验证票证序列化程序(与cookie中间件一起使用以保护身份验证cookie)创建并验证其访问令牌。

这些令牌经过加密和HMAC,因此攻击者无法更改其内容。有关详细信息,请参阅https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/introduction