【问题标题】:Authenticating user for IdentityServer on the WebApi side在 WebApi 端对 IdentityServer 的用户进行身份验证
【发布时间】: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


【解决方案1】:

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

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

c) 您使用的是 JWT 还是引用令牌?对于 JWT,您可以将 ValidationMode 设置为 Local

【讨论】:

  • 感谢 Dominick 的回复,但是... a) 我想尽快在 owin 管道中获得用户(在 app.UseIdentityServerBearerTokenAuthentication(idServerBearerTokenAuthOptions); 之后)或者这是不可能的(我有不好设计)? b) 尝试在 web.config 中添加建议,但没有日志。文件应该记录在哪里? c) 是的,它是一个 JWT 令牌。尝试使用 ValidationMode 本地,仍然是相同的结果,但它取决于一个
  • 附注b) 我在项目根目录和解决方案根目录中手动创建了 katana.trace.log,但没有记录任何内容
  • 在 Katana 管道中,您可以通过 OwinContext.Authentication.User 访问当前使用情况。对于日志记录——这只是标准的 .NET 日志记录——你应该能够让它工作
  • 我的身份验证似乎有问题 - “自省端点返回错误:发送请求时发生错误。” 这既不是描述性的,也不是我不明白的内省端点是什么,但根据identityserver.github.io/Documentation/docsv2/endpoints/…,我不使用它。将在接下来的几天内进行更多调查,现在我还有其他工作要做,但欢迎提示:)
  • 首先将验证模式设置为本地。
猜你喜欢
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 2017-04-25
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
相关资源
最近更新 更多