发布IdentityServer3身份验证时,User.Identity.GetUserName()和GetUserId()返回空字符串

时间:2015-09-28 21:24:53

标签: identityserver3

我正在使用IdentityServer3,并希望User.Identity.GetUserName()和User.Identity.GetUserId()返回存储在Claims中的值。现在我在索赔中看到它们是“子”和“电子邮件”。是否有可能:

  1. 让IdentityServer3将这些作为声明返回?我猜它们会是nameidentifier和name。

  2. 客户端应用验证后添加声明,以便User.Identity方法可用。

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

1 个答案:

答案 0 :(得分:1)

我想我已经明白了。

我在Scopes类中添加了一个新的Scope:

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; 

这似乎可以解决问题。