OIDC 隐式流 - 重定向 uri 长度

Posted

技术标签:

【中文标题】OIDC 隐式流 - 重定向 uri 长度【英文标题】:OIDC Implicit flow - redirect uri length 【发布时间】:2017-08-01 17:15:57 【问题描述】:

我正在使用带有响应类型“id_token token”的隐式代码流的 OIDC。一切正常,但注意到带有访问令牌、id_token、范围和 session_state + 域名的回调 url 已经包含 2033 个字符。我正在处理的项目需要支持 IE 10,据我所知,URL 有 2048 个字符的限制。我有点担心回调 url 的长度会危险地接近这个限制。 对这种情况有什么建议的方法?我可以将响应类型更改为“令牌”,然后从用户信息端点请求用户信息吗?或者我应该做些什么来减少回调 url 的大小,尝试减少 access_token 和 id_token 中的信息?第三个选项似乎是参考令牌,但我不担心额外调用 STS 的开销。

在项目中我使用 oidc-client-js 和 IdentityServer4。

谢谢

【问题讨论】:

您可以尝试从隐式流切换到身份验证代码流。身份验证代码流涉及将较小的身份验证代码交换为完整 JWT 的额外步骤,但您不必担心 IE 中的 URL 重定向限制。 【参考方案1】:

尽量保持令牌尽可能小。 IOW 减少索赔。

在访问令牌可用的情况下,IdentityServer 默认从身份令牌中删除所有附加声明(除非您覆盖此行为)。

正如您所说,参考标记是另一种处理方式。通过在 API 中间件中启用缓存,您可以减少开销。

IE 是瘟疫。

【讨论】:

【参考方案2】:

这里有类似的问题,但与 Electron 应用程序有关。 Electron 应用需要调用受保护的 API。 API 需要知道调用用户的身份。我尝试将响应类型从“id_token token”更改为“token”,但 IdentityServer 身份验证尝试现在导致:

用户界面:

抱歉,出现错误:invalid_scope

调试输出:

令牌响应类型的请求只能包括资源范围,但不能包括身份范围

javascript 配置(借自 Dom 的优秀 Javascript 示例客户端):

var config = 
    authority: "http://localhost:5000",
    client_id: "js",
    redirect_uri: "http://localhost:5003/callback.html",
    response_type: "token",
    scope:"openid profile TestApi",
    post_logout_redirect_uri : "http://localhost:5003/index.html",
;

【讨论】:

为什么使用redirect_uri localhost:5003?您将此值用于生产使用什么?谢谢。 使用 localhost 是因为客户端是电子应用程序,而不是传统的网络服务器客户端。

以上是关于OIDC 隐式流 - 重定向 uri 长度的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Azure OIDC 尊重我的重定向 URI?

隐式授权重定向URI的必要性是什么?

oidc-client登录后重定向

如何让用户使用隐式流登录?

使用来自 Keycloak 的 URL OIDC 参数重定向给出错误请求

在 Azure OIDC 注销后,应该将啥内容安全策略标头值重定向回应用程序