IdentityServer客户端上的唯一标识符

时间:2016-09-30 18:46:23

标签: openid identityserver3

我是一个支持承载令牌进行身份验证的API。

有自定义帐户和外部登录。现在,当用户访问api时,我想访问用户的唯一标识符以将数据与他联系起来。

我首先想到了这个主题,但没有主题主张。那么主题不是正确的吗?或者我只是错过了配置?如果UniqueNameIdentifier是我应该使用的东西吗?

user.Claims.First(I => I.Type == ClaimTypes.NameIdentifier).Value;

当我使用通过外部提供商(facebook)进行身份验证而创建的访问令牌时,我可以看到NameIdentifier包含一个ID,这样可靠吗?

还有一个网站也通过此身份服务器进行身份验证。在那里返回主题,我可以看到它具有与此nameIdentifier相同的值。但是为什么会有偏移,为什么在api配置中没有作为主题返回的值?

推荐的方式是什么

我在消费api中的配置是:

string identServer = ConfigurationManager.AppSettings["pluto:identity:server:url"];

    app.UseIdentityServerBearerTokenAuthentication(new IdentityServer3.AccessTokenValidation.IdentityServerBearerTokenAuthenticationOptions()
    {
        Authority = identServer ,

    });

并且indentity服务器中的配置是:

 return new Client
            {
                Enabled = true,
                ClientId = "pluto",
                ClientName = "Pluto Site",
                ClientSecrets = new List<Secret>
                {
                    new Secret("foo".Sha256())
                },
                Flow = Flows.ResourceOwner,
                AllowedScopes = new List<string>
                {
                    Constants.StandardScopes.OpenId,
                    "read"
                }
            };

1 个答案:

答案 0 :(得分:1)

使用主题声明。它用于唯一标识用户,这就是jwt声明类型的用途。