Spring HTTP状态-401未经授权

Spring HTTP状态-401未经授权,spring,rest,api,oauth-2.0,Spring,Rest,Api,Oauth 2.0,我试图将curl代码转换为java代码,目的是调用API来创建令牌,但得到了401响应 卷曲代码: curl -X POST \ https://apigw.dev/commercial/oauth/create-token \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'client_id=dfdfdfdfd&client_secret=dfdfdf&grant_type=client_cre

我试图将curl代码转换为java代码,目的是调用API来创建令牌,但得到了401响应

卷曲代码:

curl -X POST \
  https://apigw.dev/commercial/oauth/create-token \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'client_id=dfdfdfdfd&client_secret=dfdfdf&grant_type=client_credentials'
下面是我的java代码:

@RestController
public class TokenController {

    @RequestMapping(value = "/getAccessToken", method = RequestMethod.POST)
    public ClientCredentialsResourceDetails getAccessToken(ClientCredentialsResourceDetails resource) throws Exception {

        resource.setAccessTokenUri(tokenUri);
        resource.setClientId(clientId);
        resource.setClientSecret(clientSecret);
        resource.setGrantType("client_credentials");
        resource.setClientAuthenticationScheme(AuthenticationScheme.header);
        resource.setScope(Arrays.asList("read", "write"));

        System.out.println(resource);

        return resource;
    }
}
结果如下:

    "timestamp": "2020-04-28T14:02:28.381+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Unauthorized",
    "path": "/getAccessToken"
}

我非常感谢您的建议,提前谢谢。

您正在使用CURL发出POST请求,但您的rest控制器配置为GET。我猜您有另一个端点到/getAccessToken,它使用POST方法,该方法需要令牌。 另外,默认情况下,
@RestController
类中的每个方法都将使用
应用程序/json
,并生成
应用程序/json

如果您的请求是
内容类型:application/x-www-form-urlencoded
,请将请求的消费类型更改为
MediaType。application\u form\u urlencoded\u VALUE
您正在使用CURL发出POST请求,但您的rest控制器配置为GET。我猜您有另一个端点到/getAccessToken,它使用POST方法,该方法需要令牌。 另外,默认情况下,
@RestController
类中的每个方法都将使用
应用程序/json
,并生成
应用程序/json

如果您的请求是
内容类型:application/x-www-form-urlencoded
,请将请求的消费类型更改为
MediaType。application\u form\u urlencoded\u VALUE

不清楚您试图做什么-您是为公共API编写客户端还是自己创建客户端(如果不是,那么
create token
端点的用途是什么)。您还应该删除您的客户端ID和密码。我已经解决了我的问题,我想这很清楚。您可以建议我吗。在我看来,您的spring security处于活动状态,并且spring security正在保护getAccessToken端点。您需要设置安全性,或者指示spring security允许对/getAccessToken的所有访问。我已配置e spring安全,但响应变为403。{“时间戳”:“2020-04-29T02:45:26.770+0000”,“状态”:403,“错误”:“禁止”,“消息”:“禁止”,“路径”:“/getAccessToken”}因此,打开spring security debug logging,看看它在抱怨什么。不清楚您在尝试做什么-您是为公共API编写客户端还是自己创建客户端(如果不是,那么
create token
端点的用途是什么)。您还应该删除您的客户端ID和密码。我已经解决了我的问题,我想这很清楚。您可以建议我吗。在我看来,您的spring security处于活动状态,并且spring security正在保护getAccessToken端点。您需要设置安全性,或者指示spring security允许对/getAccessToken的所有访问。我已配置e spring安全,但响应变为403。{“时间戳”:“2020-04-29T02:45:26.770+0000”,“状态”:403,“错误”:“禁止”,“消息”:“禁止”,“路径”:“/getAccessToken”}所以打开spring安全调试日志,看看它在抱怨什么。在此之前,我尝试过使用POST方法,但仍然得到状态401。在此之前,我尝试过使用POST方法,但仍然得到状态401。