IdentityServer3:在URL与body参数中传递的client_id,secret,username,password

时间:2016-10-11 08:14:30

标签: oauth-2.0 identityserver3

我正在研究Identity Server 3的工作原理。在复数示例中,我将其视为oAuth2 enter image description here

这是否意味着我可以在网址中添加参数?

虽然我可以让身体中的参数起作用, enter image description here

我无法让URL中的参数起作用: enter image description here

是否有设置在身体参数和网址之间切换? 我做URL尝试完全错了吗?

1 个答案:

答案 0 :(得分:2)

不,这并不意味着您可以传递URL中的参数。对于客户端身份验证(传递client_idclient_secret),规范要求兼容的实现支持HTTP Basic身份验证方案,作为客户端进行身份验证的方式。

此外,特定实现还可以选择通过在请求正文中接收client_idclient_secret来支持客户端身份验证,这是您在Pluralsight中提到的示例中使用的。

对于资源所有者密码凭据授予,规范要求使用username在请求正文中传递包括passwordapplication/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_idclient_secret不再在请求正文中传递,而是在HTTP基本身份验证规则之后有一个新的Authorization标头。

标头中的值SUQ6U0VDUkVU表示Base64中编码的标识符和密码。出于演示目的,解码值为ID:SECRET