gpt4 book ai didi

oauth-2.0 - 与 OAuth2 的深层链接因重定向而丢失

转载 作者:行者123 更新时间:2023-12-03 09:10:54 24 4
gpt4 key购买 nike

我们有一个发送包含深层链接的电子邮件的应用程序,它使用 OAuth2。当用户已经“登录”(具有有效的访问 token )时,深层链接工作正常,但当 token 过期/没有 token 等时,深层链接会中断。原因是应用程序收到具有特定深层 URL 的请求,向身份验证服务器发出请求,其中包含指向自身的重定向 URL(这是主页,而不是原始请求中的深层链接,即我们曾经为应用程序配置的重定向 URL),并且当登录顺利时,身份验证服务器执行重定向,应用程序显示主页,并且忘记了原始的深层链接请求。值得一提的是,所有这些都发生在单个浏览器窗口/选项卡中(要求不要打开其他选项卡或使用弹出窗口)。

我有一个想法,使用(滥用?)身份验证服务器需要在重定向中逐字使用“状态”请求参数,并且它将包含允许应用程序显示的信息(如应用程序内的链接)所需的页面。我不确定“state”参数是否应该这样使用,它似乎是为防止 CSRF 而设计的,而不是像这样的自定义逻辑。

另一个有效的选项是基于这样一个事实:服务器不将完整的重定向 URL 与配置的 URL 进行匹配,只检查它是否以配置的 URL 为前缀(因为 OAuth2 规范没有强制要求这样做,它说应该进行完全匹配)。因此,由于我们的重定向 URL 是深层链接,并且配置的 URL 是其前缀,因此它确实有效。然而,当服务器决定匹配完整的 URL 时,这种行为就会中断(它是用 Spring Security 编写的,更改这种行为非常容易,只需使用库中已提供的不同匹配器类: https://github.com/spring-projects/spring-security-oauth/blob/ec215f79f4f73f8bb5d4b8a3ff9abe15b3335866/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/endpoint/ExactMatchRedirectResolver.java )。我想使用更安全的方法,即不对抗 OAuth2 的方法。

有更好的方法吗?

最佳答案

In the specification对于“state”参数,描述以文本开头:

An opaque value used by the client to maintain state between the request and callback.

对我来说,这意味着它正是为了您所描述的目的而设计的。在我开发的一个应用程序中,我们传递了一个状态参数值,我们可以在回调响应中包含所有必要的状态。在编码为安全的查询参数值之前,我们的值如下所示: nonce=<nonce value>&location=<deep link> 。当回调 URI 收到请求时,它将检索“state”参数的值,然后解析该值,验证随机数并重定向到该位置。

关于oauth-2.0 - 与 OAuth2 的深层链接因重定向而丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42494165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com