Asp.net web api IdentityServer 3:如何在ASP.NET WebAPI中验证索赔实体
我将IdentityServer 3与ResourceOwner流一起使用。 它似乎起作用了。我可以在fiddler中看到令牌被我的WebAPI访问和验证Asp.net web api IdentityServer 3:如何在ASP.NET WebAPI中验证索赔实体,asp.net-web-api,identityserver3,Asp.net Web Api,Identityserver3,我将IdentityServer 3与ResourceOwner流一起使用。 它似乎起作用了。我可以在fiddler中看到令牌被我的WebAPI访问和验证 app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions { Authority = "http://server/IdentityServer/", V
app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
Authority = "http://server/IdentityServer/",
ValidationMode = ValidationMode.ValidationEndpoint,
RequiredScopes = new[] { "MyFramework" },
SigningCertificate = Certificate.Get(),
DelayLoadMetadata = true
});
如果我配置:
ValidationMode=ValidationMode.ValidationEndpoint
还有一个额外的要求。
使用ValidationMode.Local,则没有。(这很好,因为IdentityServer嵌入在WebAPI中)
但是如果我使用ValidationMode.Local,则有两个对IdentityServer的请求。
为什么这是必要的?IdentityServer是嵌入式的,可以在内存中访问此信息。即使设置为“ValidationMode.ValidationEndpoint”,这两个调用也不会出现
但回到我的主要问题:
如何在WebAPI中验证索赔实体?
我有一个“AuthenticationHandler”(ASP.NET DelegatingHandler),用于处理旧的基本身份验证的验证
我发现我可以使用HttpContext.Current.User访问IPrincipal。
现在我检查它的类型为“ClaimSideEntity”,并且标识为
这是正确的方法吗?
如何检查用户ID
在服务器端,用户的ID被放在“sub”声明(又名“Subject”)中。
我是否必须访问此特定属性才能检查哪个用户已登录
我可以这样访问它:
ClaimsIdentity.Claims.FirstOrDefault(c=>c.Type.Equals(“sub”)
但仅在设置为“ValidationMode.ValidationEndpoint”时使用。
然后,IPrincipal的AuthenticationType为“Bearer”,并且存在“sub”声明
设置为“ValidationMode.Local”时,AuthenticationType为“JWT”,并且声明不存在
为什么ValidationMode会更改IPrincipal?我需要检查不同的情况吗