Java OAuth 2.0 получить токен доступа - PullRequest
0 голосов
/ 23 ноября 2018

Я хочу получить токен доступа OAuth 2.0 из REST API через Java код, дело в том, что мне удалось успешно получить его обратно с сервера с Скрипт Bash (команда curl)

Скрипт Bash (работает):

#!/usr/bin/env bash

       # Base URL of TeamForge site.
       site_url="https://teamforge.example.com"

       # TeamForge authentication credentials.
       username="foo"
       password="bar"

       # Requested scope (all)
       scope="urn:ctf:services:ctf

       curl -d "grant_type=password&client_id=api-client&scope=$scope&username=$username&password=$password" $site_url/sf/auth/token

С этим фрагментом кода я получаю следующий ответ:

  {
         "access_token": "eyJraWQiOiIxIiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiJhZG1pbiIsImF1ZCI...",
         "token_type": "Bearer"
       }

Когда я пытался перевести его на Java код, используя Unirest :

  HttpResponse<JsonNode> jsonResponse = Unirest.post("\"https://teamforge.example.com/sf/auth/token")
                .header("accept", "application/json")
                .body("{\"grant_type\":\"password\"," +
                        "\"client_id\":\"api-client\", " +
                        "\"scope\":\"urn:ctf:services:ctf\"," +
                        "\"username\":\"foo\"," +
                        "\"password\":\"bar\"}")

                .asJson();

        System.out.println(jsonResponse.getBody());

Ответ был:

{"error_description":"Invalid grant","error":"invalid_grant"}

После нескольких исследований и попыток я все еще не знаю, что мне не хватает в моем запросе кода Java.Может ли кто-нибудь помочь мне добавить недостающий материал или направить меня в правильном направлении?

Документы CollabNet:

Saso

1 Ответ

0 голосов
/ 09 января 2019

Пожалуйста, попробуйте:

JsonNode jsonResponse = Unirest.post("https://teamforge.example.com/sf/auth/token")
.header("Content-Type", "application/json")
.field("scope", "urn:ctf:services:ctf")
.field("client_id", "api-client")
.field("grant_type", "password")
.field("username", "foo")
.field("password", "bar")
.asJson()
.getBody();

И еще один вопрос, который вы уверены относительно типа гранта?
grant_type = client_credentials Может быть, вам нужно что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...