2015-11-22 4 views
1

Я строю свой веб-сервис oauth2-protecet и клиент. Для webservice я использовал весеннюю безопасность, и used this as example. Для клиента я пытаюсь использовать библиотеку apache oltu. Вот мой фрагмент:OAuth2 oltu client

 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()); 

Это не работает. Хотя это

curl -X POST -vu clientapp:123456 --data "grant_type=client_credentials&client_secret=123456&client_id=clientapp" http://localhost:8080/oauth/token 

работает отлично. Вот завиток запрос:

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 

, как вы можете видеть, я использовал обычную проверку подлинности с завитком и она работала (хотя и предложил тип аутентификации Bearer).

И вот Олт пакет:

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() вместо buildHeaderessage(), как это было предложено в this post, но это не хорошо либо.

ответ

0

Следующая появилась работа для меня:

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

Не могли бы вы рассказать немного о том, почему это решение сработало для вас? – aribeiro

1

Эта линия не смотрит очень здоровым:

Authorization: Bearer client_credentials123456clientapp 

Я создал тестовый сервер с Олту, в основном сервлет:

 OAuthResponse oauthResponse = OAuthASResponse 
      .tokenResponse(HttpServletResponse.SC_OK) 
      .setAccessToken(accessToken) 
      .setExpiresIn(Integer.toString(expires)) 
      .setRefreshToken(refreshToken) 
      .buildJSONMessage(); 
     response.setStatus(oauthResponse.getResponseStatus()); 
     response.setContentType("application/json"); 

И для клиента я получил:

 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() я получаю исключение на сервере

OAuthProblemException {error='invalid_request', description='Missing grant_type parameter value' ... } 

Но я вижу, что Олт находится в версии 1.0.1 теперь, пока я проверял на версию 1.0.0. Эта версия может вести себя иначе.

Смежные вопросы