【发布时间】: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