User.Identity.GetUserName() 和 GetUserId() return 空字符串 post IdentityServer3 身份验证时

User.Identity.GetUserName() and GetUserId() return empty strings when post IdentityServer3 authentication

我正在使用 IdentityServer3 并希望它能够 User.Identity.GetUserName() 和 User.Identity.GetUserId() return 存储在声明中的值。现在我在声明中看到它们是 "sub" 和 "email"。是否可以:

  1. 让 IdentityServer3 return 这些作为声明?我猜他们会是 nameidentifier 和 name.

  2. 在客户端应用程序通过身份验证后添加声明,以便 User.Identity 方法可用。

希望这是有道理的,我感谢任何反馈。

我想我明白了。

我在作用域中添加了一个新的作用域 class:

new Scope
{
     Name = "public",
     DisplayName = "Public scope",
     Type = ScopeType.Identity,
     IncludeAllClaimsForUser = true
}

然后我在 AccountController 的 SignIn 操作中修改了我的登录名 url:

var url = Settings.AuthorizeEndpoint +
     "?client_id=" + Settings.ClientId +
     "&response_type=id_token" +
     "&scope=openid email profile public" +
     "&redirect_uri=" + Settings.RedirectUri +
     "&response_mode=form_post" +
     "&state=" + state +
     "&nonce=" + nonce; 

这似乎可以解决问题。