IdentityServer3 : client_id, secret, username, password passed in URL vs body parameters
IdentityServer3 : client_id, secret, username, password passed in URL vs body parameters
我正在查看 Identity Server 3 的工作原理。在一个 pluralsight 示例中,我看到了 oAuth2
这是否意味着我可以在 URL 中添加参数?
虽然我可以让 body 中的参数起作用,
我无法使 URL 中的参数起作用:
是否有在body参数和URL之间切换的设置?
我的 URL 尝试完全错了吗?
不,这并不意味着您可以传递URL中的参数。对于客户端身份验证(通过 client_id
和 client_secret
),规范要求兼容的实现支持 HTTP 基本身份验证方案作为客户端身份验证的一种方式。
此外,特定的实现也可以选择通过在请求 body 中接收 client_id
和 client_secret
来支持客户端身份验证,这就是您在示例中使用的内容从 Pluralsight 中提到。
对于资源所有者密码凭据授予,规范规定请求的参数包括 username
和 password
使用 application/x-www-form-urlencoded
在请求 body 中传递。
如您所见,在这两种情况下都不允许在 URL 本身中传递信息。出于安全原因,这是不支持的,规范在与客户端身份验证相关的部分中明确提到了这一点(执行客户端身份验证的实际推荐方法是使用 HTTP Basic 方案,但使用请求 body 是可以接受的)。
The parameters can only be transmitted in the request-body and MUST NOT be included in the request URI.
有:
client_id
: ID
client_secret
:秘密
使用HTTP Basic认证代替请求中传递参数进行客户端认证的示例body:
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
不再在请求 body 中传递,取而代之的是我们有一个新的 Authorization
header 遵循 HTTP 基本认证规则。
header中的值SUQ6U0VDUkVU
表示用Base64编码的标识符和密码。出于演示目的,解码值是 ID:SECRET
.
我正在查看 Identity Server 3 的工作原理。在一个 pluralsight 示例中,我看到了 oAuth2
这是否意味着我可以在 URL 中添加参数?
虽然我可以让 body 中的参数起作用,
我无法使 URL 中的参数起作用:
是否有在body参数和URL之间切换的设置? 我的 URL 尝试完全错了吗?
不,这并不意味着您可以传递URL中的参数。对于客户端身份验证(通过 client_id
和 client_secret
),规范要求兼容的实现支持 HTTP 基本身份验证方案作为客户端身份验证的一种方式。
此外,特定的实现也可以选择通过在请求 body 中接收 client_id
和 client_secret
来支持客户端身份验证,这就是您在示例中使用的内容从 Pluralsight 中提到。
对于资源所有者密码凭据授予,规范规定请求的参数包括 username
和 password
使用 application/x-www-form-urlencoded
在请求 body 中传递。
如您所见,在这两种情况下都不允许在 URL 本身中传递信息。出于安全原因,这是不支持的,规范在与客户端身份验证相关的部分中明确提到了这一点(执行客户端身份验证的实际推荐方法是使用 HTTP Basic 方案,但使用请求 body 是可以接受的)。
The parameters can only be transmitted in the request-body and MUST NOT be included in the request URI.
有:
client_id
: IDclient_secret
:秘密
使用HTTP Basic认证代替请求中传递参数进行客户端认证的示例body:
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
不再在请求 body 中传递,取而代之的是我们有一个新的 Authorization
header 遵循 HTTP 基本认证规则。
header中的值SUQ6U0VDUkVU
表示用Base64编码的标识符和密码。出于演示目的,解码值是 ID:SECRET
.