在RFC6749#setion-4.1.1中介绍redirect_uri是可选的。
但授权代码流上面的步骤(A),(C),(D)和(E)描述了redirect_uri的作用。
特别是步骤(E)描述如下......
并确保重定向URI 收到匹配用于重定向客户端的URI 步骤(C)。
当我看到第4.1.1节时,我很困惑 我想也许这个文件没错,只是愚蠢我不明白。
请告诉我为什么redirect_uri
参数是可选的。
提前谢谢。
答案 0 :(得分:1)
在rfc6749#section-2中,描述:
注册客户端时,客户端开发人员应: o 提供其客户端重定向URI ,如第3.1.2节中所述。
在rfc中,SHALL
表示MUST
,REQUIRED
(Key words for use in RFCs to Indicate Requirement Levels)
让我们看看@Florent Morselli提到的rfc6749#section-3.1.2.3。
如果已注册多个重定向URI ,
如果只有部分重定向URI已注册,
或如果没有注册重定向URI ,
客户端必须使用" redirect_uri"包含授权请求的重定向URI。请求参数。
如果我们在注册客户端时只提供了一个完整的重定向uri,则redirect_uri在授权请求时是可选的。
如果" redirect_uri"参数包含在授权请求中,您必须将其包含在访问令牌请求中。详情here。
答案 1 :(得分:1)
问题的答案在步骤(C)中(相同的RFC6749#section-4.1):
授权服务器将用户代理重定向回客户端 使用先前提供的重定向URI(在请求中或 客户注册)。
因此,如果授权请求中没有redirect_uri
,则授权服务器将使用在客户端注册期间设置的默认网址(如{galleurio在其答复中提到的rfc6749#section-2中所述)。
也在#section-3.1.2中:
3.1.2。重定向端点
与资源所有者完成互动后, 授权服务器将资源所有者的用户代理引导回 客户端。授权服务器将用户代理重定向到 客户端先前与 客户端注册过程中的授权服务器 发出授权请求。