我正在实现response_mode=form_post,我想知道这种模式可能的response_types是什么。
我在一些地方读到它支持response_type=code, response_type=id_token。(仅限登录)。当access_token返回时,类型为id_token,我们可以使用form_post吗?
response_mode控制令牌如何传递到客户端,如果您使用response_mode=form_post,那么它是通过自动提交表单post完成的由标识提供程序生成。如果您不提供它,您将通过查询字符串获得令牌。.就我所知,没有别的选择了。
基本上,response_mode定义了如何将令牌(ID/Access/refresh)传递到您的客户端。
根据这里的规范:
它说:
这个规范定义了表单Post响应模式,用它的response_mode参数值来描述:
该模式下,授权响应参数采用HTML格式编码表单值是在用户代理中自动提交的,因此通过HTTP POST方法传输到客户端,并获得结果在主体中使用应用程序/x-www-form-urlencoded格式。的动作属性表单必须是客户端的重定向URI。表单的方法属性必须是POST。因为授权响应是预定的仅使用一次,授权服务器必须指示用户代理(和任何中介)不存储或重用的内容响应。
用户代理支持的任何技术都可能被用来导致提交表格,以及任何必要的表格内容来支持这一点可能包括,如提交控件和客户端脚本命令。然而,客户端必须能够处理消息而不考虑表单提交的机制启动。
https://openid.net/specs/oauth-v2-form-post-response-mode-1_0.html
您可以将任何响应类型与form_post
响应模式一起使用。规范定义了应与给定响应类型一起使用的默认响应模式,但form_post
的规范并未限制其仅用于某些response_type
情况。
但是,这对您的实现应该没有任何影响。您应该接受授权服务器返回的表单并提交它,就像在页面上处理任何其他HTML表单一样。所以表单中的内容对你来说并不重要,操作URL应该在表单中。