【问题标题】:IdentityServer4 - ASP .Net core 2 - getting unauthorized even using a valid tokenIdentityServer4 - ASP .Net core 2 - 即使使用有效令牌也未经授权
【发布时间】:2020-04-09 15:31:24
【问题描述】:

我正在从 .Net 核心 mvc 应用程序访问我的安全 API(由 identityServer4 保护)。

当我使用 注册用户 登录时,当我访问 API 资源时,我会从 IdentityServer BUT 的令牌端点获得一个有效令牌使用该令牌我得到了 401 响应未授权,即使它是新令牌,对该 API 资源的唯一限制是角色 X,并且用户已经拥有该角色 X。

您知道为什么会这样吗?

更新: 身份服务器部署在 负载平衡器 下的两个 Web 服务器上。使用时 令牌存储在服务器的内存中是否有关系?

谢谢。

【问题讨论】:

  • 是否有任何记录表明它可能被拒绝的原因?
  • 如果您在 Visual Studio 上看到输出窗口并查看更多详细信息(如果存在),这可能会有所帮助。
  • 验证Token的参数有哪些?如果角色不匹配,则 StatusCode 应为 403

标签: asp.net token identityserver4 unauthorized


【解决方案1】:

我的回答看起来有点像猜测,因为您没有提供太多细节。

既然您提到了负载平衡器,请确保您在两个网络服务器中的 IdentityServer4 应用使用相同的数据保护密钥。

您应该阅读更多关于: services.AddDataProtection()

https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-3.1

在阅读之前,您可以通过简单地解耦或关闭两个 Web 服务器之一并仅保留一个来检查这是否真的是问题所在。然后尝试再次刷新令牌并调用api。

这只是对开发人员在考虑不考虑扩展到许多(Web 服务器)时面临的一个常见问题的快速回答。

否则,请提及更多细节,以便我提供更多帮助:)

【讨论】:

    【解决方案2】:

    当使用负载平衡器时,我们不应使用 InMemory 存储。 解决方案是将我们存储令牌和授权的方式从 InMemory 存储更改为数据库存储。 在此处查看教程https://deblokt.com/2019/09/20/02-identityserver4-entityframework/ 在这里http://docs.identityserver.io/en/release/quickstarts/8_entity_framework.html

    【讨论】:

      猜你喜欢
      • 2018-02-13
      • 2019-11-26
      • 2018-06-05
      • 2017-12-25
      • 2015-01-24
      • 2023-03-18
      • 1970-01-01
      • 2021-08-26
      • 2012-08-20
      相关资源
      最近更新 更多