我正在使用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属性)是否值得信任,或者我是否应该自己获得索赔。
答案 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。