Asp.net core 授权HandlerContext.User在ASP.NET核心中的何处创建?
我有一个Asp.net core 授权HandlerContext.User在ASP.NET核心中的何处创建?,asp.net-core,authorization,identityserver4,Asp.net Core,Authorization,Identityserver4,我有一个AuthorizationHandler,用于评估的某些授权要求。ASP.NET核心的某些部分使用AuthorizationHandlerContext的实例调用HandlerRequestEntAsync 授权HandlerContext.User在哪里填充? 对于上下文,我在AuthorizationContext.User中查找与HTTP请求中包含的JWT访问令牌中的OAuth2声明相对应的一些属性。当JWT令牌是由IdentityServer4发布时,这可以正常工作,但现在我添加
AuthorizationHandler
,用于评估的某些授权要求。ASP.NET核心的某些部分使用AuthorizationHandlerContext
的实例调用HandlerRequestEntAsync
授权HandlerContext.User在哪里填充?
对于上下文,我在AuthorizationContext.User
中查找与HTTP请求中包含的JWT访问令牌中的OAuth2声明相对应的一些属性。当JWT令牌是由IdentityServer4发布时,这可以正常工作,但现在我添加了对来自辅助身份提供者的访问令牌的支持
当令牌来自另一个提供者时,AuthorizationContext.User
是一个包含所有空白字段的空对象(即,它没有访问令牌中的任何声明)。此辅助身份提供程序(及其公钥)包含在JWT承载身份验证方案中,分别位于TokenValidationParameters.ValidIssuers
和TokenValidationParameters.IssuerSigningKeys
中
这将导致以下日志消息:
AuthenticationScheme: "Bearer" was successfully authenticated.
Authorization failed for user: <sub from the access token used in the request>
AuthenticationScheme:“承载人”已成功通过身份验证。
用户的授权失败:
这对我来说现在是一个没有意义的问题,因为我后来意识到我在一个认证方案中添加了两个不同的权限。一旦我切换到使用更惯用的工作流来配置不同的身份验证方案,上下文的用户和声明似乎就可以很好地填充了。我确实通过调试器找到了创建HttpContext
的地方,尽管我不介意是否有人可以分享关于如何(或为什么不尝试)自定义ASP.NET Core创建上下文和用户的方式的见解,来自任何可用的JWT令牌/cookie。此处定义了定义多个身份验证方案的过程,以防对其他人有所帮助: