无法在REST服务中为OAuth2 POST请求将参数放入正文

时间:2017-02-01 15:31:59

标签: spring rest post oauth jersey

似乎我在这里遗漏了一些非常基本的东西。

我创建了一个REST Api,它使用Apache Oltu OAuth2服务获取生成令牌的POST请求,如下所示:

@POST
@Consumes("application/x-www-form-urlencoded")
@Produces("application/json")
public Response authorize(@Context HttpServletRequest request) throws OAuthSystemException, IOException {
    try {
        OAuthTokenRequest oauthRequest = new OAuthTokenRequest(request);
        OAuthIssuer oauthIssuerImpl = new OAuthIssuerImpl(new MD5Generator());

当我使用HttpRequester或Postman测试服务时,如果我输入所有身份验证和OAuth2参数作为输入参数,它的工作完全正常,例如:

https://localhost:8443/rest/OAuthService/token?grant_type=password&username=userfortest&password=Johhny1é&client_id=1234

但是我读到,对于任何POST请求,所有参数 为 在HTTP请求的Body中,并且从未使用url作为简单参数发送。当我尝试在HTTP请求的主体中传递它时,为了使请求安全(所以url是相同的,没有参数,并且所有参数都在正文中指定),它似乎没有收到任何东西

后,身体抛出异常
OAuthTokenRequest oauthRequest = new OAuthTokenRequest(request);  

带有以下消息:

    {"error_description":"Missing grant_type parameter value","error":"invalid_request"}

对于要通过url传递的参数,Oltu / OAuth2的预期行为是什么?或者我做错了什么?

提前致谢。

1 个答案:

答案 0 :(得分:2)

你的答案在这里:Unable to retrive post data using ,@Context HttpServletRequest when passed to OAuthTokenRequest using Oltu

我完全按照他说的做了,而且效果很好。

您需要修改响应授权()参数。