Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 授权HandlerContext.User在ASP.NET核心中的何处创建?_Asp.net Core_Authorization_Identityserver4 - Fatal编程技术网

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。此处定义了定义多个身份验证方案的过程,以防对其他人有所帮助: