Spring boot 为什么OAuth2AccessTokenSupport总是发送POST请求??

Spring boot 为什么OAuth2AccessTokenSupport总是发送POST请求??,spring-boot,spring-security-oauth2,Spring Boot,Spring Security Oauth2,我正在使用SpringBoot+SpringSecurityOAuth2来使用RESTfulOAuth2服务 我们的Oauth2服务总是期望HTTP GET,但OAuth2AccessTokenSupport总是发送HTTP POST 结果: 导致405(方法不允许);调用错误处理程序 受保护的OAuth2AccessToken retrieveToken(AccessTokenRequest请求,OAuth2ProtectedResourceDetails资源, 多值映射表单(HttpHead

我正在使用SpringBoot+SpringSecurityOAuth2来使用RESTfulOAuth2服务

我们的Oauth2服务总是期望HTTP GET,但OAuth2AccessTokenSupport总是发送HTTP POST

结果:

导致405(方法不允许);调用错误处理程序

受保护的OAuth2AccessToken retrieveToken(AccessTokenRequest请求,OAuth2ProtectedResourceDetails资源,
多值映射表单(HttpHeaders)引发OAuth2AccessDeniedException{
试一试{
this.authenticationHandler.authenticateTokenRequest(资源、表单、标题);
this.tokenRequestEnhancer.enhance(请求、资源、表单、头);
AccessTokenRequest copy=请求;
ResponseExtractor委托=getResponseExtractor();
ResponseExtractor提取器=新的ResponseExtractor(复制,委派){
公共OAuth2Access令牌提取数据(ClientHttpResponse响应)引发IOException{
if(response.getHeaders().containsKey(“设置Cookie”)){
这个.val$copy.setCookie(response.getHeaders().getFirst(“Set Cookie”));
}
返回((OAuth2AccessToken)this.val$delegate.extractData(response));
}
};
return((OAuth2AccessToken)getRestTemplate().execute(getAccessTokenUri(资源,表单),getHttpMethod(),
getRequestCallback(资源、表单、标题)、提取器、表单.toSingleValueMap());
}捕获(OAuth2异常oe){
抛出新的OAuth2AccessDeniedException(“拒绝访问令牌”),资源,oe;
}捕获(RestClientException rce){
抛出新的OAuth2AccessDeniedException(“请求访问令牌时出错”,资源,rce);
}
}
受保护的HttpMethod getHttpMethod(){
返回HttpMethod.POST;
}
受保护字符串getAccessTokenUri(OAuth2ProtectedResourceDetails资源,多值映射形式){
字符串accessTokenUri=resource.getAccessTokenUri();
if(this.logger.isDebugEnabled()){
this.logger.debug(新建StringBuilder().append(“从中检索令牌”).append(accessTokenUri.toString());
}
StringBuilder=新的StringBuilder(accessTokenUri);
串分离器;
if(getHttpMethod()==HttpMethod.GET){
分隔符=“?”;
if(accessTokenUri.contains(“?”){
分隔符“&”;
}
for(字符串键:form.keySet()){
builder.append(分隔符);
append(新的StringBuilder().append(key.append(“=”).append(key.append(“}”).toString());
分隔符“&”;
}
}
返回builder.toString();
}
谁能解释一下为什么OAuth2AccessTokenSupport总是返回POST和 如何发送HTTP GET请求


要启用令牌端点的GET请求,需要在AuthorizationServerConfigurerAdapter中添加以下内容:

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    endpoints.allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST);
}
至于为什么默认情况下只发布:我认为这是因为GET请求可能会将用户名和密码信息作为请求参数发送(密码授予就是这种情况)。这些可能在web服务器日志中可见,而正文数据则不可见


实际上,用于OAuth2的RFC声明客户端在请求访问令牌()时必须使用HTTP POST。要启用令牌端点的GET请求,您需要在AuthorizationServerConfigurerAdapter中添加以下内容:

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    endpoints.allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST);
}
至于为什么默认情况下只发布:我认为这是因为GET请求可能会将用户名和密码信息作为请求参数发送(密码授予就是这种情况)。这些可能在web服务器日志中可见,而正文数据则不可见

实际上,OAuth2的RFC声明客户端在请求访问令牌()时必须使用HTTPPOST