【发布时间】: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