在ASP.NET Core 8中,OpenID Connect的SUB声明可能会丢失,我们可以通过以下代码示例来解决这个问题:
首先,确保你的应用程序已经配置了OpenID Connect中间件。在Startup.cs文件的ConfigureServices方法中添加以下代码:
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options =>
{
options.Authority = "https://your-authorization-server-url";
options.ClientId = "your-client-id";
options.ClientSecret = "your-client-secret";
options.ResponseType = "code";
options.Scope.Add("openid");
options.Scope.Add("profile");
options.CallbackPath = "/signin-oidc";
options.ClaimsIssuer = "your-authorization-server-url";
options.SaveTokens = true;
});
接下来,在Configure方法中添加以下代码:
app.UseAuthentication();
app.UseAuthorization();
然后,我们可以在需要访问SUB声明的地方使用以下代码:
var user = HttpContext.User;
var subClaim = user.FindFirst("sub")?.Value;
这样就可以从User.Identity中获取到SUB声明的值了。
注意:确保你的授权服务器在发出令牌时包含SUB声明,否则无法在User.Identity中找到SUB声明。
希望这个代码示例可以帮助到你解决问题!