我是一个支持承载令牌进行身份验证的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"
}
};
答案 0 :(得分:1)
使用主题声明。它用于唯一标识用户,这就是jwt声明类型的用途。