Как выполнить http-запрос akka для oauth2 access_token

#akka #akka-http

Вопрос:

Я пытаюсь запросить аутентификацию сервера, чтобы получить access_token . У меня есть рабочая команда curl , но я не могу реализовать ее с помощью Akka HTTP.

  curl -v -u CLIENT_ID:CLIENT_SECRET -k -X POST -d {} 'URL/oauth2/token?grant_type=client_credentialsamp;scope=Scope'
 

или

 curl -i -H 'Authorization: Basic Base64(CLIENT_ID:CLIENT_SECRET)' --request POST URL/oauth2/token -d 'grant_type=client_credentialsamp;scope=scope'
 

я получаю ошибку 405 Метод Не разрешен при запросе с помощью http.singleRequest

 def getToken(url:String, user: String, pass: String, scope:String) = {

  Http()
    .singleRequest(
      Post(
        Uri(url),
        Map("grant_type" -> "client_credentials", "scope" -> s"$scope"),
      ).withHeaders(
        Authorization(BasicHttpCredentials(user, pass)),
      ),
    )

}
 

Комментарии:

1. Не могли бы вы показать нам соответствующий код/конфигурацию!

2. добавлен образец fn.

3. возможно ли, что URL-адрес, который вы используете в коде scala, не совпадает с URL-адресом, который вы используете в вызове curl?

4. Спасибо всем, теперь это сработало после добавления сущности с помощью FromData. FormData .apply( Карта( «grant_type» -> «client_credentials», «область действия» ->> «область действия», ),

5. Не могли бы вы опубликовать свой код в качестве ответа, чтобы мы также узнали, где вы разместили эту последнюю строку, которая решила проблему?

Ответ №1:

 val request = HttpRequest(
  HttpMethods.POST,
  config.authDomain,
  entity = FormData
    .apply(
      Map(
        "grant_type" -> s"${config.grant_type}",
        "scope" -> s"${config.api_scope}",
      ),
    )
    .toEntity,
).withHeaders(Authorization(BasicHttpCredentials(config.access_id, config.access_secret)))