【发布时间】:2023-04-10 00:28:01
【问题描述】:
我是新手。有人可以帮我吗,因为我已经为我的问题发疯了将近一个月:( 简而言之:我有身份服务器项目、一个 webapi 项目和 Angular 客户端。客户端请求进行身份验证并获取 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,它应该让我成为当前登录用户
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).InstancePerRequest();
builder.Register(c => new ClaimsIdentityApiUser((ClaimsIdentity)Thread.CurrentPrincipal.Identity)).As<IApiUser>().InstancePerRequest();
但是 Thread.CurrentPrincipal.Identity 什么都没有,并且 ClaimsPrincipal.Current.Identity 也一无所有。我错过了什么??
附言与此问题Protecting webapi with IdentityServer and Autofac - can't get claims 类似的问题,但显然不是相同的解决方案或设置。
【问题讨论】:
-
您是否尝试过查看 HttpContext.User 而不是线程用户?
-
感谢特拉维斯的回复。我相信这也适用于控制器(如 RequestContext),但我想在 owin 管道中识别用户。还是我错了? (在这种情况下,请给我一个简短的例子)
-
这可能是显而易见的,但是您是否添加了授权属性?没有它,就没有任何东西可以强制进行身份验证,并且身份将为空
-
@SimonHalsey 我想在用户到达控制器调用之前带走用户(需要授权的api方法)
标签: asp.net-web-api asp.net-identity autofac identityserver3 katana