【问题标题】:Sub claim is missing子声明丢失
【发布时间】:2018-08-06 17:08:47
【问题描述】:

使用 IdentityServer4 和 Windows 身份验证似乎一切都很好,但是在调用 SignInAsync 时会抛出缺少子声明错误。我做了各种方法,但总是同样的错误。在下面的屏幕截图中,您可以看到正在添加“sub”,为什么它说它丢失了?

Startup.cs

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(HttpSysDefaults.AuthenticationScheme);

控制器

var result = await context.AuthenticateAsync(HttpSysDefaults.AuthenticationScheme);

if (result.Principal is WindowsPrincipal principalUser) {...all fine here}

context.SignInAsync(...);//**BOOM**

【问题讨论】:

  • 听起来好像使用了错误的身份验证方案。您将什么设置为默认身份验证方案?请阅读文档的第一段:docs.microsoft.com/en-us/aspnet/core/security/authorization/… 指定默认方案会导致 HttpContext.User 属性设置为该标识。如果不需要该行为,请通过调用 AddAuthentication 的无参数形式来禁用它
  • 更新问题
  • 您必须从 'AddAuthentication()' 中删除 'HttpSysDefaults.AuthenticationScheme' 才能使用 CookieAuthenticationScheme 作为默认设置。然后在 ChallengeAsync() 和 AuthenticateAsync() 中手动设置方案,这是正确的。

标签: asp.net-core identityserver4


【解决方案1】:

解决方案是在调用services.AddIdentityServer之前调用services.AddAuthentication(HttpSys.DefaultsAuthenticationSchme)

【讨论】:

  • ...所以 idsrv 内置配置会覆盖您的配置。但是如何保持您的初始订单并仅删除默认方案覆盖?猜猜应该也可以
猜你喜欢
  • 2018-04-03
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 2022-06-30
相关资源
最近更新 更多