身份服务器 Angular 客户端故障排除

Troubleshooting Identity Server Angular clients

我有一个带有 MVC 和 Angular 客户端应用程序的 IdentityServer4 实现。两者大部分时间都工作正常。然而,根据报告,有时 Angular 客户端应用程序会陷入某种我怀疑的重定向循环。类似于此

https://www.scottbrady91.com/OpenID-Connect/Help-Im-Stuck-in-a-Redirect-Loop

客户端应用程序使用隐式流。出现错误时我不在场,也无法在场,因为这是一个全球 24/7 操作。在 Angular 应用级别实施日志记录或解决一般问题的最佳方法是什么?

问得好,因为 OAuth 解决方案涉及多个端点,而且可靠性经常被低估。交付支持快速解决问题的弹性解决方案是一项挑战。

了解重定向循环的原因

根据我的经验,这些是最常见的原因:

  • 授权服务器 returns 对登录重定向错误的错误响应 / error_description 字段 - 在这种情况下,Web UI 的正确行为是清楚报告错误并停止处理

  • Web UI 登录响应处理失败,例如在验证 id 令牌的 JWKS 签名时 - Web UI 应该再次停止处理并清楚地报告错误

  • API returns 一个永久的 401 到 Web UI 当提供了有效的令牌时 - 在这种情况下 API 可能配置不正确 - 需要记录 401 失败的详细信息 - 未找到令牌/已过期/签名验证是否失败?

  • API returns 错误的状态代码 - 例如访问资源被拒绝应该作为 403 返回到 Web UI 并且技术问题应该返回为 500

  • 有一个 cookie 解密错误 - 在集群环境中很常见 - 听起来这与你的情况无关,因为你使用的是隐式流并且你的 Angular 客户端是无 cookie

开发过程中的可靠性措施

我总是鼓励我的团队在基础知识完成后像这样工作(尽管我的成功有限 - 哈哈):

  • 至少测试几个失败场景
  • 查看重要行为的代码路径 - 例如 API 状态代码
  • 确保在 UI 秒内显示正确的错误,以帮助快速解决问题
  • 向 Web API 提供可靠的错误响应 UI,并记录失败原因

要比较的解决方案

我的

This write up 可能会给您一些关于方法的想法。第 10 步和第 17 步处理在开发期间模拟 Web UI 和 API 故障并确保所需的行为。下面是一些相关代码: