OpenID Connect 实施说明

IBM® Verify 继续遵循安全最佳实践,对 OpenID Connect的实施进行安全改进。 我们将尽可能保持与早期版本的兼容性,但您必须修改某些项目以增强安全性。

OpenID Connect 实现的变更

  • 某些错误消息可能会更新,但消息 ID 保持不变。 如果您的任何流程中包含读取响应消息的逻辑,请改用消息 ID。
  • 当调用授权端点以获取授权码或令牌时,系统可能会将用户重定向至登录页面或进行多因素身份验证。 在浏览器中,此操作会触发一些自动重定向。 如果您的测试自动化是基于此流程构建的,请务必确保也能自动跟随重定向。
  • 对于返回作用域的端点,不返回作用域或返回空字符串的情况将被视为相同。
  • JSON 字符串中的正斜杠 (/) 可能未被转义。 请确保您的 JSON 解析器同时支持这两种情况。
  • API 权限不再显示在用户的同意提示中。 仍会向为该客户端生成的令牌授予 API 权限。
  • 该规范规定,仅当 hostnamelocalhost 或 IP 回环字面量时,才允许在 中 redirect_uri 使用 方案 http 。 参见 OpenID Connect Core 1.0: 部分 3.1.2.1。 身份验证请求
  • 查询参数的顺序并不总是固定的。 在处理查询参数时,请使用合适的库,或者采用一种稳健 regex 的处理方式,确保无论参数顺序如何都能正确识别。

OpenID Connect 实现的未来变更

对于以下项目,您无需立即进行任何更改。 不过,我们强烈建议您修改这些设置,以确保您的 OpenID Connect部署符合最佳实践,并能适应未来的变更。
  • 通常情况下,将 POST 请求的参数放在请求正文中,比放在查询参数中更安全。
  • nonce 参数必须是一个加密随机值,以确保攻击者无法猜出。 请确保密码足够长且具有随机性。 请参阅 “Nonce 实现说明”。 建议至少输入8个字符。
  • 授权服务器 (IBM Verify) 会生成授权码和令牌,这些令牌的长度不限,但出于安全考虑,未来可能会进行调整。 存储令牌时,请确保令牌长度至少为 1024 个字符。 JWT 格式的令牌(如 ID 令牌或 JWT 格式的访问令牌)的长度取决于 JWT 的内容。 当向 JWT 映射更多属性时,其内容会随之扩展。
  • 无标识符令牌的令牌类型不区分大小写,例如“Bearer”或“bearer”。 请勿对该值进行区分大小写的验证。
  • 执行刷新令牌流程时,新生成的ID令牌不包含原始的nonce。 原始流程返回的 nonce 用于防范针对授权请求的重放攻击,而对于刷新令牌流程中的后续令牌请求,则无需采取此类防范措施。
  • nonce与 类似,PKCE 代码验证器必须是一个加密随机值,且无法被猜中。 规范要求代码验证器的长度至少为43个字符。 参见 RFC 7636
  • 使用该 state 参数,通过将其设置为一个无法被猜出且可验证的值,从而防止跨站请求伪造。 例如,生成用于验证用户代理的会话 Cookie 的哈希值。 参见 RFC 6749。 建议至少输入8个字符。
  • 受众 aud 值可以是字符串或数组。 特别是,如果受众只有一个值,它可以是一个字符串,也可以是一个包含一个字符串的数组。
  • 客户端凭证授权类型旨在为机器间访问生成访问令牌。 请不要期望此类授权能够生成身份令牌,也不要使用访问令牌来访问该 userinfo 端点。
  • ID 令牌中的 (type) 标头参数是 typ 可选的。 依赖方不应期望在身份令牌中包含 typ 标头参数。