【问题标题】:Identity Server 4: 401 instead of redirect for specific controllersIdentity Server 4:401,而不是针对特定控制器的重定向
【发布时间】:2018-04-04 17:39:28
【问题描述】:

我正在向我的 Identity Server 4 asp.net core mvc 应用程序添加几个控制器。需要明确的是,我已将这些添加到 IdentityProvider 应用程序(我用于 SSO),而不是客户端应用程序。

当我向我的端点(例如 GET sso.app.com/api/users)发送一个请求并且我没有通过身份验证时,我会被重定向到我的登录页面,否则它工作得很好。我想拦截重定向并让控制器返回 401 Unauthorized 。

我已经探索过使用 Authorize 标头的策略,但这只会根据已通过身份验证的用户给我一个通过/失败,因此我没有足够的控制权。我读到另一个类似的 SO 问题,即 aspnet 核心团队不希望开发人员扩展 Authorize 标头,而是使用策略。

我在 Startup 中添加服务时也没有找到任何明显的选项。是否有任何选项可以让我为特定路径/端点(例如“/api”)设置行为?

【问题讨论】:

  • 所以你这里有三个应用程序?身份服务器、一些带有 API 的身份提供者 (IDP) 和客户端?还是您将身份服务器称为 IDP(这很好,有时是,有时不是)?但是,如果我了解您的设置,则重定向到登录应该接收 API 端点作为返回 URL。只需在您的登录控制器中检查它,如果 URL 与您要阻止的端点匹配,则返回 401。我认为您无法在 Identity Server 的其他地方进行拦截。
  • 你是对的。我没想过这样做。我想首先没有办法阻止重定向发生。您的解决方案现在应该可以正常工作。谢谢! (如果您将您的评论作为答案,我会将其标记为正确)
  • 谢谢,已复制。你是对的,防止重定向的唯一方法是“手动”管理身份验证(防止或发出对 ChallengeAsync 之类的调用),与使用属性相比,这是很多工作。 OIDC 就是关于重定向...

标签: asp.net-core identityserver4


【解决方案1】:

评论复制到答案:

所以你这里有三个应用程序?身份服务器、一些带有 API 的身份提供者 (IDP) 和客户端?还是您将 Identity Server 称为 IDP(这很好,有时是,有时不是)?

但如果我理解您的设置,则重定向到登录应该接收 API 端点作为返回 URL。只需在您的登录控制器中检查它,如果 URL 与您要阻止的端点匹配,则返回 401。

我认为您无法在 Identity Server 的其他地方进行拦截。

【讨论】:

  • 我确实需要确保我发回了一些 JSON。否则,它将再次重定向:P
猜你喜欢
  • 2020-10-28
  • 2018-09-19
  • 2017-10-18
  • 2016-09-11
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
相关资源
最近更新 更多