Spring security OAuth2请求作为对象而不是查询参数
我想定制OAuth端点URI。 我想在post正文中发送参数,而不是查询参数 现在我的要求是-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_
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