首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OAuth2 oltu客户端

OAuth2 oltu客户端
EN

Stack Overflow用户
提问于 2015-11-22 21:16:41
回答 2查看 1.6K关注 0票数 1

我正在构建受OAuth2保护的and服务和一个客户端。对于webservice,我使用了spring安全实现和used this as example。对于客户端,我尝试使用apache oltu库。下面是我的代码片段:

代码语言:javascript
复制
        OAuthClientRequest request = OAuthClientRequest.tokenLocation
                ("http://localhost:8080/oauth/token")
                .setGrantType(GrantType.CLIENT_CREDENTIALS)
                .setClientId("clientapp")
                .setClientSecret("123456")
                .buildHeaderMessage();

        OAuthAccessTokenResponse oAuthResponse = cli.accessToken(request);

        System.out.println(oAuthResponse.getAccessToken());

它不起作用。虽然这是

代码语言:javascript
复制
curl -X POST -vu clientapp:123456 --data "grant_type=client_credentials&client_secret=123456&client_id=clientapp"  http://localhost:8080/oauth/token

效果非常好。下面是curl请求:

代码语言:javascript
复制
POST /oauth/token HTTP/1.1
Authorization: Basic Y2xpZW50YXBwOjEyMzQ1Ng==
User-Agent: curl/7.35.0
Host: localhost:8080
Accept: */*
Content-Length: 70
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_secret=123456&client_id=clientapp

正如您所看到的,我对curl使用了基本身份验证,并且它起作用了(尽管建议的身份验证类型是持有者)。

下面是oltu数据包:

代码语言:javascript
复制
POST /oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer client_credentials123456clientapp
User-Agent: Java/1.8.0_51
Host: localhost:8080
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 4

null

我也不确定持有者授权是如何工作的,但这个包看起来完全错了。

我还尝试使用buildBodyMessage()buildQueryMessage(),而不是this post中建议的buildHeaderessage(),但也不太好。

EN

回答 2

Stack Overflow用户

发布于 2016-03-08 08:16:50

这行看起来不太健康:

代码语言:javascript
复制
Authorization: Bearer client_credentials123456clientapp

我用Oltu创建了一个测试服务器,基本上是一个servlet:

代码语言:javascript
复制
        OAuthResponse oauthResponse = OAuthASResponse
            .tokenResponse(HttpServletResponse.SC_OK)
            .setAccessToken(accessToken)
            .setExpiresIn(Integer.toString(expires))
            .setRefreshToken(refreshToken)
            .buildJSONMessage();
        response.setStatus(oauthResponse.getResponseStatus());
        response.setContentType("application/json");

对于我得到的客户:

代码语言:javascript
复制
        OAuthClientRequest request = OAuthClientRequest
                .tokenLocation("http://localhost:8083/OltuServer/token")
                .setGrantType(GrantType.CLIENT_CREDENTIALS)
                .setClientId("clientapp")
                .setClientSecret("123456")
                .buildQueryMessage();

        OAuthAccessTokenResponse oAuthResponse = oAuthClient.accessToken(request);

        System.out.println(oAuthResponse.getAccessToken());        

与您的代码的主要区别是buildQueryMessage()。使用buildHeaderMessage(),我在服务器上得到一个异常

代码语言:javascript
复制
OAuthProblemException {error='invalid_request', description='Missing grant_type parameter value' ... }

但是我看到Oltu现在是1.0.1版本,而我一直在1.0.0上测试。这个版本可能会有不同的表现。

票数 1
EN

Stack Overflow用户

发布于 2016-03-01 18:16:52

以下内容似乎对我很有效:

代码语言:javascript
复制
OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient());
OAuthClientRequest bearerClientRequest = OAuthClientRequest.tokenLocation("http://localhost/rest/auth")
             .setUsername("userid")
             .setPassword("Password01")
             .buildQueryMessage();

bearerClientRequest.setHeader(OAuth.HeaderType.CONTENT_TYPE, "multipart/form-data"); 
OAuthResourceResponse resourceResponse = oAuthClient.resource(bearerClientRequest, OAuth.HttpMethod.POST, OAuthResourceResponse.class);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33855176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档