确认用户已通过身份验证,否则将返回null。您可以在View视图中使用User.Identity.IsAuthenticated属性来验证用户是否已通过身份验证。
确认您已添加了ClaimsIdentity并将Email声明添加到ClaimsIdentity中。示例代码如下:
var claims = new List
{
new Claim(ClaimTypes.Name, "John"),
new Claim(ClaimTypes.Email, "john@example.com"),
};
var userIdentity = new ClaimsIdentity(claims, "login");
var userPrincipal = new ClaimsPrincipal(userIdentity);
// Add userPrincipal to Current Principal
HttpContext.Current.User = userPrincipal;
确认在配置身份验证时,您已正确地设置了AuthenticationType和Issuer。示例代码如下:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.LoginPath = "/login";
options.LogoutPath = "/logout";
})
.AddOpenIdConnect(options =>
{
options.Authority = "https://localhost:44367/";
options.ClientId = "mvc";
options.ClientSecret = "secret";
options.ResponseType = "code";
options.SaveTokens = true;
options.Scope.Add("api");
options.Scope.Add("offline_access");
options.GetClaimsFromUserInfoEndpoint = true;
});
如果你是在ASP.NET MVC Core 6的控制器或视图中使用User.FindFirstValue方法,你可以使用HttpContext.User.FindFirstValue(ClaimTypes.Email)来获取Email声明的值。
string email = HttpContext.User.FindFirstValue(ClaimTypes.Email);
如果上面的方法仍然返回null,请检查您的签名密钥是否正确配置,并且您应该能够成功记录等级和消息。
var jwtIssuerOptions = Configuration.GetSection("JwtIssuerOptions"); SymmetricSecurityKey appSecret = new SymmetricSecurityKey(Encoding