在WebApi端为IdentityServer验证用户

时间:2016-08-26 13:24:57

标签: asp.net-web-api asp.net-identity autofac identityserver3 katana

我是新来的。有人可以帮助我,因为我对我的问题疯狂了近一个月了:( 简而言之:我有身份服务器项目,webapi项目和角度客户端。客户端请求进行身份验证并获取id_token和access_token(一切都好),access_token发送到我所拥有的webapi项目:

var idServerBearerTokenAuthOptions = new IdentityServerBearerTokenAuthenticationOptions  {
            Authority = "https://localhost:11066/IdentityServer/identity",
            ValidationMode = ValidationMode.ValidationEndpoint,
            AuthenticationType = "Bearer",
            RequiredScopes = new[] { "permissions", "openid" },
            DelayLoadMetadata = true
        };
app.UseIdentityServerBearerTokenAuthentication(idServerBearerTokenAuthOptions);

我有Autofac,应该让我当前的logedin用户

builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).InstancePerRequest();
builder.Register(c => new ClaimsIdentityApiUser((ClaimsIdentity)Thread.CurrentPrincipal.Identity)).As<IApiUser>().InstancePerRequest();

但Thread.CurrentPrincipal.Identity什么都没有,而且 还有ClaimsPrincipal.Current.Identity什么都没有。我错过了什么?

P.S。与此问题Protecting webapi with IdentityServer and Autofac - can't get claims类似的问题,但显然不是同样的解决方案也没有设置。

1 个答案:

答案 0 :(得分:0)

a)应始终从ApiController.User(或RequestContext)检索用户 b)令牌验证可能由于某种原因失败,使用此资源启用令牌验证中间件的日志记录:

https://identityserver.github.io/Documentation/docsv2/consuming/diagnostics.html

你正在使用JWT或参考令牌吗?对于JWT,您可以将ValidationMode设置为Local