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-адреса.