Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring security OAuth2请求作为对象而不是查询参数_Spring_Oauth_Spring Security Oauth2 - Fatal编程技术网

Spring security OAuth2请求作为对象而不是查询参数

Spring security OAuth2请求作为对象而不是查询参数,spring,oauth,spring-security-oauth2,Spring,Oauth,Spring Security Oauth2,我想定制OAuth端点URI。 我想在post正文中发送参数,而不是查询参数 现在我的要求是- example.com/oauth/token?grant_type=password&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&username={USERNAME}&password={PASSWORD} 但我想要这样 example.com/oauth/token 请求机构- { grant_

我想定制OAuth端点URI。 我想在post正文中发送参数,而不是查询参数

现在我的要求是-

example.com/oauth/token?grant_type=password&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&username={USERNAME}&password={PASSWORD}
但我想要这样

example.com/oauth/token

请求机构-

{
    grant_type=password,
    client_id={CLIENT_ID},
    client_secret={CLIENT_SECRET},
    username={USERNAME},
    password={PASSWORD}
}

我应该怎么做?

正确实现的授权服务器的令牌端点不接受GET请求,因为RFC 6749“表示如下:

客户端在发出访问令牌请求时必须使用HTTP“POST”方法

因此,授权服务器的令牌端点应该拒绝GET请求

RFC 6749“表示,使用资源所有者密码凭据流的令牌请求的请求参数应以“application/x-www-form-urlencoded”格式嵌入到请求正文中。以下是从“”中摘录的内容


因此,您不必自定义授权服务器。如果服务器实现正确,其令牌端点将接受POST请求。

正确实现的授权服务器的令牌端点不接受GET请求,因为RFC 6749“表示如下:

客户端在发出访问令牌请求时必须使用HTTP“POST”方法

因此,授权服务器的令牌端点应该拒绝GET请求

RFC 6749“表示,使用资源所有者密码凭据流的令牌请求的请求参数应以“application/x-www-form-urlencoded”格式嵌入到请求正文中。以下是从“”中摘录的内容


因此,您不必自定义授权服务器。如果服务器实现正确,其令牌端点将接受POST请求。

由spring-oauth2创建的令牌端点也已处理POST。 很难对其进行定制以接受JSON请求体,因为TokenEndpoint类希望所有参数都是@RequestParam参数

但是,如果您担心安全性(因为HTTPs不保护查询参数),您确实可以通过post发送请求参数。只需以“表单数据”或“x-www-form-urlencoded”的形式发送请求即可。这是两种在请求正文中发送任意键值参数的方法,在服务器上显示为常规请求参数。所以这是一个让你的客户使用它的问题


另外,请注意,在spring-oauth2中,可以禁用GET端点,这样可以强制客户机使用上述方法之一的POST。

spring-oauth2创建的令牌端点也可以处理POST。 很难对其进行定制以接受JSON请求体,因为TokenEndpoint类希望所有参数都是@RequestParam参数

但是,如果您担心安全性(因为HTTPs不保护查询参数),您确实可以通过post发送请求参数。只需以“表单数据”或“x-www-form-urlencoded”的形式发送请求即可。这是两种在请求正文中发送任意键值参数的方法,在服务器上显示为常规请求参数。所以这是一个让你的客户使用它的问题


另外,请注意,在spring-oauth2中,可以禁用GET端点,这种方式迫使客户端使用上述方式之一的POST。

OAuth的全部要点是动词和URL模式是标准化的。。。您使用POST而不是GET的用例是什么?只是为了让它更安全。我不想在url中公开我的参数值。您应该始终使用HTTPS。如果不是,GET和POST参数都以纯文本形式通过网络发送,并且都不安全。我建议使用HTTPS并遵守标准。我知道这一点。我关心的不是请求类型。我不想在URL中公开我的用户名、密码和其他参数。因此,我希望OAuth将其作为application/json主体接受。。。您使用POST而不是GET的用例是什么?只是为了让它更安全。我不想在url中公开我的参数值。您应该始终使用HTTPS。如果不是,GET和POST参数都以纯文本形式通过网络发送,并且都不安全。我建议使用HTTPS并遵守标准。我知道这一点。我关心的不是请求类型。我不想在URL中公开我的用户名、密码和其他参数。因此,我希望OAuth将其作为application/json body接受
 POST /token HTTP/1.1
 Host: server.example.com
 Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
 Content-Type: application/x-www-form-urlencoded

 grant_type=password&username=johndoe&password=A3ddj3w