Ответ «Неверный запрос» на PredictHQ API [«ошибка»: invalid_client] запрос «аутентификации»

В настоящее время требуется выполнить запрос аутентификации в API PredictHQ с использованием Alamofire.

Я сгенерировал учетные данные клиента в консоли разработчика и передал их в свой проект. Проблема заключается в том, что я использую URL-адрес https://api.predictq.com/oauth2/токен/ в своей функции *receiveJSONData() для получения сетевого статуса моих запросов.

Ниже приведены примеры, которые я использовал на веб-сайте PredictHQ https://developer.predictq.com/oauth2/ о том, как должен быть отформатирован запрос cURL.

Ответ «Неверный запрос» на PredictHQ API [«ошибка»: invalid_client] запрос «аутентификации»Ответ «Неверный запрос» на PredictHQ API [«ошибка»: invalid_client] запрос «аутентификации»

1) I first created my networkServiceClient class

import UIKit
import Alamofire

class networkServiceClient {

    private let token = "GENERATED_TOKEN_FROM_PREDICTHQ_API".data(using: String.Encoding.utf8)!.base64EncodedString()
    private let secret = "GENERATED_SECRET_KEY_FROM_PREDICTHQ_API".data(using: String.Encoding.utf8)!.base64EncodedString()
    private let id = "GENERATED_ID_FROM_PREDICTHQ_API".data(using: String.Encoding.utf8)!.base64EncodedString()
    private let contentType = "application/json"
    private var authURL = URL(string: "https://api.predicthq.com/oauth2/token/")
    private var tokenDataURL = URL(string: "https://api.predicthq.com/v1/events/")

    typealias webResponse = ([[String: Any]]?, Error?) -> Void

    func receiveJSONData(completion: @escaping webResponse){

        let loginString = String(format: "Basic %@:%@", id, secret)

        let postHeaders:HTTPHeaders =  ["Authorization": loginString, "Accept": contentType]

        let params: [String : Any] = ["grant_type": "client_credentials", "scope": "account events signals"]

         //post authentication request
        AF.request(authURL!, method: .post, parameters: params, headers: postHeaders).responseJSON { (response) in

            if let error = response.error {

                completion(nil, error)

            } else if let jsonArray = response.value as? [[String: Any]] {

                completion(jsonArray, nil)

            } else if let jsonDict = response.value as? [String: Any] {

                completion([jsonDict], nil)

            }

        }

}

2) Then I implemented it in my TestingViewingController

import UIKit
import Alamofire


class TestingViewController: UIViewController {

    private let networkingClient = networkServiceClient()
    override func viewDidLoad() {
        super.viewDidLoad()
        networkingClient.receiveJSONData() { (json, error) in
            if let error = error {
                print(error.localizedDescription)
            } else if let json = json {

                print(json.description)
            }

        }

    }

}

3) Lastly, here is my output in the TestingViewController console.

"error": invalid_client

Ответ «Неверный запрос» на PredictHQ API [«ошибка»: invalid_client] запрос «аутентификации»

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
115
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эй, это может быть потому, что вы кодируете base64 client_id и secret отдельно, но они должны быть закодированы вместе (разделенные двоеточием), как показано на снимке экрана.

Спасибо роб! Кодирование их отдельно сделало свою работу.

Kyle C. Beachem 20.06.2019 18:54

Другие вопросы по теме