答案 0 :(得分:2)
不,这并不意味着您可以传递URL中的参数。对于客户端身份验证(传递client_id
和client_secret
),规范要求兼容的实现支持HTTP Basic身份验证方案,作为客户端进行身份验证的方式。
此外,特定实现还可以选择通过在请求正文中接收client_id
和client_secret
来支持客户端身份验证,这是您在Pluralsight中提到的示例中使用的。
对于资源所有者密码凭据授予,规范要求使用username
在请求正文中传递包括password
和application/x-www-form-urlencoded
的请求参数。
如您所见,在任何情况下都不允许传递URL本身的信息。出于安全原因,这不受支持,并且规范在与客户端身份验证相关的部分中明确提到了这一点(执行客户端身份验证的实际建议方法是使用HTTP Basic方案,但可以使用请求正文)。
参数只能在请求体中传输,绝不能包含在请求URI中。
使用:
client_id
:ID client_secret
:SECRET 使用HTTP基本身份验证执行客户端身份验证而不是在请求正文中传递参数的示例:
POST /oauth/token HTTP/1.1
Host: jmangelo.auth0.com
Authorization: Basic SUQ6U0VDUkVU
Content-Type: application/x-www-form-urlencoded
code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&
redirect_uri=https://oauth2.example.com/code&
grant_type=authorization_code
正如您在此处注意到的那样,client_id
和client_secret
不再在请求正文中传递,而是在HTTP基本身份验证规则之后有一个新的Authorization
标头。
标头中的值SUQ6U0VDUkVU
表示Base64中编码的标识符和密码。出于演示目的,解码值为ID:SECRET
。