【问题标题】:Cannot put parameters in body for OAuth2 POST requests in a REST service无法将参数放入 REST 服务中的 OAuth2 POST 请求的正文中
【发布时间】:2017-02-13 11:14:27
【问题描述】:

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

我制作了一个 REST Api,它接受 POST 请求以使用 Apache Oltu OAuth2 服务生成令牌,看起来像这样:

@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 请求的正文中,并且从不使用 url 作为简单参数发送。当我尝试在 HTTP 请求的正文中传递它时,以使请求安全(因此 url 在没有参数的情况下是相同的,并且所有参数都在正文中指定),似乎它没有收到任何来自

之后的主体,因为它引发异常
OAuthTokenRequest oauthRequest = new OAuthTokenRequest(request);  

带有以下信息:

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

通过 url 传递参数是否是 Oltu/OAuth2 的预期行为?还是我做错了什么?

提前致谢。

【问题讨论】:

    标签: spring rest post oauth jersey


    【解决方案1】:

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

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

    您需要修改Response authorize()参数。

    【讨论】:

    • 谢谢,没错!同时,我找到了一种解决方法,即手动将从请求中收到的正文参数转换为 url 参数以传递给 OAuthTokenRequest,但是您的答案中的解决方案更有效且更易于实施。
    猜你喜欢
    • 2016-04-02
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    相关资源
    最近更新 更多