Oauth 2.0 OAuth2(自动化代码授权类型)的重定向URI中是否应存在动态查询参数

Oauth 2.0 OAuth2(自动化代码授权类型)的重定向URI中是否应存在动态查询参数,oauth-2.0,okta,f5,big-ip,rfc6749,Oauth 2.0,Okta,F5,Big Ip,Rfc6749,类似这样的来源(参见“每个请求定制”一节)提到,自动化请求的redirect_uri参数不应该有动态查询部分(例如:用于会话匹配) 引述: 服务器应拒绝任何带有重定向URL的授权请求 与注册的URL不完全匹配 我们的OAuth AZ提供商是BIG-IP F5。我们正在建立它,他们似乎符合上述观点 我们的客户机是在别处构建的web应用程序,它们似乎不遵循上述规则。 以下是授权端点的完整表示(修订): 他们使用的重定向_uri的格式类似于(为了简单起见,我这里不进行urlencode):redir

类似这样的来源(参见“每个请求定制”一节)提到,自动化请求的redirect_uri参数不应该有动态查询部分(例如:用于会话匹配)

引述:

服务器应拒绝任何带有重定向URL的授权请求 与注册的URL不完全匹配

我们的OAuth AZ提供商是BIG-IP F5。我们正在建立它,他们似乎符合上述观点

我们的客户机是在别处构建的web应用程序,它们似乎不遵循上述规则。 以下是授权端点的完整表示(修订):

他们使用的重定向_uri的格式类似于(为了简单起见,我这里不进行urlencode):redirect_uri=,每个调用的SOMELONGSESSIONID值都不同

我们深入研究了RFC6749(OAuth2),并在第3.1.2.2节中发现:

授权服务器应要求客户端提供
完成重定向URI(客户端可以使用“状态”请求
参数以实现每个请求的自定义)。如果需要
无法注册完整的重定向URI,
授权服务器应要求注册URI
方案、权限和路径(允许客户端动态变化
请求时仅重定向URI的查询组件
授权)

我理解并想在这里验证的是,第一个源Okta和F5只接受上述规则的第一部分,并且要求重定向uri完全注册,没有任何动态部分

我确认他们(Okta和F5)不符合摘录的第二部分,引用他们应该“允许(ing)客户动态变化”,对吗 请求时仅重定向URI的查询组件 授权“


或者,RFC6749是否有任何形式的官方修正/改进,以保证两家公司的设计立场?

TL;博士

否,出于安全原因,重定向uri必须是静态的。如果客户端需要在授权请求与其异步响应之间保持
状态
,请使用OAuth 2.0
状态
参数

长版本

RFC6749(最初的OAuth 2.0规范)已于2012年发布,自那时起,OAuth安全环境发生了很大变化

已经提到,拒绝动态构建的重定向URI是防止XSS和客户端模拟攻击的好方法

,从2014年开始,OAuth 2.0的一个常用扩展,具有身份验证功能,已经考虑到这一建议,并要求所有重定向URI进行精确的字符串匹配

在验证请求中传递的重定向uri时,通过强制重定向uri预注册并强制AS使用简单字符串比较来确认。因此,不能使用动态重定向uri

您的客户端使用重定向uri作为授权请求和响应之间的“状态保持器”,并在重定向uri内使用动态构建的
SessionID
属性,这显然是错误的。OAuth2.0为此有一个专用的授权请求参数,即“”。客户应该使用它。AS在发出响应时会将该状态附加到重定向uri的参数中,因此客户端将能够在响应中找到该状态

正确的授权请求应该是:

响应如下所示:


这样,重定向uri是静态的,所以一个简单的字符串比较就足以在AS端验证该uri。任何比简单字符串比较更复杂的算法都会有安全漏洞。

这里似乎有两个问题:您所指的URL:

 https://somehost/authcallback?state=SOMELONGSTATE&scope=someobjecttype&response_type=code
建议您将客户端的重定向URI(又名.callback URL,由URL中的路径名表示)与授权服务器的授权端点混淆

只有授权端点才会采用建议的参数,并且可能包含动态
状态
值。客户端的重定向URI将不包含响应类型等内容

可以将
重定向\u uri
参数添加到授权请求中,然后必须按照您描述的方式进行匹配。确认匹配后,授权服务器将重定向回重定向URI,添加
code
state
参数

更新(问题更改后):


OAuth 2.0 RFC6749允许使用动态(SessionId)参数,尽管这不是最佳实践。但是,如果您的客户端是OpenID Connect客户端,这是不允许的,因为OpenID Connect规范(OAuth 2.0的“概要文件”)将重定向URI锁定为“精确”,在这种情况下,您必须配置所有可能的sessionID

嗨!请看问题中的url。。。我的客户似乎在使用“状态”。因此,您认为我的OAuth2 AZ供应商应该支持此查询参数是动态的?根据我从您的问题中了解到的情况,
状态
是重定向uri的一部分,重定向uri本身就是授权请求的一个参数。
状态
应该是授权请求的一个参数,并且
redirect\u uri
必须是为授权服务器上的特定客户端预先注册的静态。我试图在回答中澄清
state
参数的正确使用。更新:客户端应用程序使用了一个.Net库,其中在“redirect\u uri”中包含“SessionId”作为选项。他们(que客户端开发人员)更改了该选项,现在严格依赖