Twinfield API OAuth2.0 getaccessToken php-twinfield/twinfield

В настоящее время я пытаюсь настроить Twinfield API, это должно быть довольно просто при использовании библиотеки php-twinfield / twinfield. Но есть одна вещь, которую я не совсем понимаю.

Вот мой код:

          $provider    = new OAuthProvider([
        'clientId'     => 'someClientId',
        'clientSecret' => 'someClientSecret',
        'redirectUri'  => 'https://example.org/'
    ]);

    $accessToken  = $provider->getAccessToken("authorization_code", ["code" => ...]);
    $refreshToken = $accessToken->getRefreshToken();
    $office       = \PhpTwinfield\Office::fromCode("someOfficeCode");

    $connection  = new \PhpTwinfield\Secure\OpenIdConnectAuthentication($provider, 
    $refreshToken, $office);

Для $accessToken требуется что-то в точках, какой-то код. Я не уверен, что это должно быть ...

Я надеюсь, что кто-нибудь может мне помочь. Уже спасибо!


Я все еще застрял с настройкой oauth2 ... похоже, у провайдера есть вся необходимая информация. Он возвращает код, необходимый для получения accessToken. Но, пытаясь получить его, используя следующий код:

      $accessToken = $provider->getAccessToken('authorization_code', 
  ['code' => $_GET['code']]);

Это вернет invalid_grant. Я попытался сбросить свой clientSecret ... но это не помогло. Я надеюсь, что кто-нибудь сможет мне помочь.

1 ответ

Для доступа к Twinfield API пользователи должны пройти аутентификацию. Вы можете сделать это, указав имя пользователя и пароль или используя OAuth2. При использовании OAuth2 вы делегируете аутентификацию так называемому провайдеру OAuth. После аутентификации пользователя провайдер перенаправит браузер пользователя на конечную точку ( redirectUri) в вашем приложении. Этот запрос, который получает ваше приложение, имеет параметр GET, называемый code. Затем ваше приложение обменяет код на токен, используя его clientId а также clientSecretи HTTP POST. Это означает, что ваше приложение должно быть зарегистрировано у поставщика OAuth2, чтобы поставщик (например, github, facebook, google, ...) мог проверить учетные данные клиента и вернуть токен. И вам нужно будет настроить свой provider переменная, указывающая на поставщика OAuth, с которым вы подключаетесь.

      $provider = new OAuthProvider([
    'clientId'                => 'XXXXXX',    // The client ID assigned to you by the provider
    'clientSecret'            => 'XXXXXX',    // The client password assigned to you by the provider
    'redirectUri'             => 'https://example.com/your-redirect-url/',
    'urlAuthorize'            => 'https://login.provider.com/authorize', //where the user's browser should be redirected to for triggering the authentication
    'urlAccessToken'          => 'https://login.provider.com/token', //where to exchange the code for a token
    'urlResourceOwnerDetails' => 'https://login.provider.com/resource' //where to get more details about a user
]);

// If we don't have an authorization code then get one
if (!isset($_GET['code'])) {

    // Fetch the authorization URL from the provider
    // Redirect the user to the authorization URL.
}

Twinfield использует библиотеку для реализации OAuth. Поэтому см. Https://oauth2-client.thephpleague.com/usage/ для получения подробной информации о том, как настроить клиент OAuth в библиотеке Twinfield. league/oauth2-clientподдерживает некоторых провайдеров из коробки и позволяет сторонним провайдерам. Ваш провайдер может быть в любом из списков. Если нет, обратитесь к документации вашего провайдера, чтобы получить правильные URL-адреса.

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