我试图查明授权代码授予是否允许服务器使用 POST 调用redirect_uri。
根据我的经验,大多数授权服务器都使用 GET,但我偶然发现了一种情况(Acuity Scheduling API),它使用 POST 调用redirect_uri。
这是否违反规范或符合预期?
我浏览了 OAuth2 规范和几个在线资源。我找不到证实这一点的明确消息来源。
这是完全可以的,通常是将授权代码发布给客户端的首选方式。授权服务器返回一个带有隐藏 HTML 表单的 HTML 页面。然后使用 JavaScript 自动提交给客户端。
表格看起来像这样:
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
set-cookie: session=s%3A99AF5HUWVOclLXJjEWxKIxUSu-XES_Im.Yr39g9QIZ%2FSnmZ84NsYAxNc...
<html><head><title>Submit This Form</title></head>
<body onload="javascript:document.forms[0].submit()">
<form method="post" action="https://example.com/Account/LoggedIn">
<input type="hidden" name="access_token" value="bMJgE4X4FuL6PNRxxdByKJfruEA..."/>
<input type="hidden" name="expires_in" value=“3600"/>
<input type="hidden" name="token_type" value="Bearer"/>
<input type="hidden" name="state" value="36819"/>
<input type="hidden" name="id_token" value="eyJ0eXAiOiJKV...XXX...eEA_ZCF4"/>
</form>
</body></html>
要认识到的重要一点是,实际的 POST 是由浏览器执行的,而不是授权服务器。