OAuth2变量重定向\u uri

OAuth2变量重定向\u uri,oauth,oauth-2.0,Oauth,Oauth 2.0,我们正在编写一个与OAuth2API集成的插件 棘手的是,我们不能像在大多数集成中那样硬编码重定向URI,因为客户端可以在他们控制的任何域上安装这个插件(想想Wordpress插件),访问令牌需要重定向回他们的自定义url 我们看到您也可以在OAuth2中设置状态参数。因此,我们可以将重定向URI硬编码为http://oursite.com/callback并将状态设置为https://[CUSTOM\u URL] 然后http://oursite.com/callback将执行额外的重定向到自

我们正在编写一个与OAuth2API集成的插件

棘手的是,我们不能像在大多数集成中那样硬编码重定向URI,因为客户端可以在他们控制的任何域上安装这个插件(想想Wordpress插件),访问令牌需要重定向回他们的自定义url

我们看到您也可以在OAuth2中设置
状态
参数。因此,我们可以将重定向URI硬编码为
http://oursite.com/callback
并将状态设置为
https://[CUSTOM\u URL]

然后
http://oursite.com/callback
将执行额外的重定向到自定义URL,并传递访问令牌

但是,这似乎是一个安全漏洞,因为一旦用户验证了应用程序,其他人可能会出现,并导致它在
状态下使用自己的url重新验证。然后它会很高兴地重定向到他们的坏url,并向他们传递访问令牌

那么,人们如何在重定向uri可能不同的地方设置OAuth2集成呢?谢谢


另外,我们想到的一个解决方案是,如果重定向uri是我们控制的url,则只允许使用
状态
参数。然后,我们可以创建另一个验证页面,再次提示用户:“是否允许访问您的帐户…”。但是我们认为可能有更好的方法。

对于动态客户端地址,可能值得考虑使用基于本地主机的重定向URI。首先,这听起来可能有悖常理,但由于OAuth2是基于浏览器/httpclientlib的协议,因此它可以工作。来自服务器授权端点的重定向由您自己的浏览器完成,因此始终正确解析localhost as redirect_uri。因此,无论您在何处部署应用程序,都可以使用修复重定向uri


<>这个解决方案也有它的含义,你应该考虑架构和安全后果。基于本地主机的重定向uri非常适合隐式授权场景(即javascript客户端),但我认为对于授权代码授权场景(即远程web应用程序),您应该使用远程可访问的主机名,你的方向是正确的,这是向州政府传递信息的唯一途径。
为了不存在安全问题,我建议您不要在状态中传递URL,而是传递关键字。然后在你的应用程序中有一个映射来处理
http://oursite.com/callback
URL,并且只有当映射中存在关键字时,才能从该映射重定向到相应的URL

谢谢你的回复,但我不认为我理解。如何将redirect_uri设置为localhost help,以及如果它试图重定向到localhost会发生什么情况-可能他们没有本地运行的web服务器,所以我肯定错过了什么。谢谢你的帮助!Localhost可以作为部署到不同服务器的所有客户端的统一重定向uri,而无需向状态添加单独的uri。要正确解析localhost,浏览器必须与客户端应用程序位于同一台计算机上,因此这适用于隐式流(即javascript客户端,例如手机上的应用程序)。对于javascript客户端,您不需要本地Web服务器,您只需检测重定向并从重定向URI中提取令牌。我还试图找到类似BrianArmstrong的替代方法,但当您从应用程序管理输入localhost以重定向URI时,用户将被重定向到localhost,并且您的javascript或服务器端代码无论如何都不会到达该访问令牌。facebook可以使用客户端登录,因为他们已经有javascript sdk,但许多oauth提供商没有。在@Zólyomi István有什么我遗漏的吗?这是很久以前的事了,我们使用了一个定制的OAuth2服务器。坦率地说,我不知道Facebook目前是如何做到这一点的-/你找到解决办法了吗?我问过我同样的问题,如何为Wordpress插件实现Oauth 2.0身份验证,重定向URL可能因安装位置而异