& Quot; Invalid_grant & Quot; ответ при использовании Twinfield Openid Oauth connect

Это библиотека, которую я использовал https://github.com/php-twinfield/

Это проблема, когда я вызываю логин Oauth. Я завершил почти API с именем пользователя и паролем, но клиент хочет это с Oauth. Я думаю, что есть проблема в redirectUri. Когда я звонил Oauth, это всегда показывало:

{
"success": false,
"error": "invalid_grant"}

Это мои полномочия. Clientid и clientsecret получают из почты и URI перенаправления, установленного по ссылке Openid Twinfield. Пожалуйста, поправьте меня, если что-то не так в учетных данных.

clientId : Demorent
clientSecret : /iY7gyWn3Hkdgs4XzUG66SDyPNkk177x3A==
redirectUri : https://www.oauth.client.redirect.uri.com

Код, который используется:

public function login(\Illuminate\Http\Request $request)
{
try {
// In the $request param all the credential given
$provider    = new \PhpTwinfield\Secure\Provider\OAuthProvider([
'clientId'     => $request->clientId,
'clientSecret' => $request->clientSecret,
'redirectUri'  => $request->redirectUri
]);
// Here pass the authorization code
$accessToken  = $provider->getAccessToken("authorization_code", ["code" =>'NLA000067']);
$refreshToken = $accessToken->getRefreshToken();
$office       = \PhpTwinfield\Office::fromCode("1008");
$connection  = new \PhpTwinfield\Secure\OpenIdConnectAuthentication($provider, $refreshToken, $office);
$customerApiConnector = new \PhpTwinfield\ApiConnectors\CustomerApiConnector($connection);
$result = $customerApiConnector->get('1008',$office);
$jsonResponse = JsonResponse::success($result);

} catch(SoapFault $e) {
$jsonResponse = empty($e->getMessage()) ? JsonResponse::error(class_basename($e)) : JsonResponse::error($e->getMessage());
}
return $jsonResponse;
}

2

Решение

Начать, invalid_grant стандартный параметр ошибки OAuth 2.0 Поскольку OpenID Connect построен на OAuth 2.0, этот ответ действителен. Если вы проверите 5.2 Раздел об ошибках, Вы найдете ниже объяснение

invalid_grant

Предоставленный грант авторизации (например, авторизация
код, учетные данные владельца ресурса) или токен обновления
недействителен, истек, отозван, не соответствует перенаправлению
URI, использованный в запросе авторизации или выданный
другой клиент.

Как это объясняется, это может быть что угодно от перенаправления URI, учетных данных владельца ресурса. Но я вижу некоторые проблемы с вашим кодом, связанные с кодом авторизации.

    // Here pass the authorization code
$accessToken  = $provider->getAccessToken("authorization_code", ["code" =>'NLA000067']);

Вы используете жесткий код Код авторизации (NLA000067)? Это не верно. Первым шагом предоставления кода авторизации является получение кода авторизации. Только тогда вы можете выполнить запрос токена. Вы получаете код авторизации из запроса авторизации, и я не вижу, что вы делаете это.

Если это так, то ответ об ошибке, который вы получаете, полностью действителен. Как объяснено выше invalid_grant является результатом неверного кода авторизации.

p.s- может быть этот ссылка поможет вам решить проблему

1

Другие решения

@ AnandPandey, следуйте инструкциям ниже

ШАГ 1:

Сначала вам нужно создать URL, который вы бы вызвали, чтобы подключиться к Twinfield. И для этого у вас должен быть URL, как показано ниже.

https://login.twinfield.com/auth/authentication/connect/authorize?
client_id=Demorent
&client_secret=/iY7gyWn3Hkdgs4XzUG66SDyPNkk177x3A==
&redirect_uri=https://www.oauth.client.redirect.uri.com
&response_type=code
&force_login=0
&scope=openid+twf.user+twf.organisation+twf.organisationUser+offline_access
&state=STATELESS
&nonce=nonce

Замечания:

1) redirect_uri должно быть точно таким же, как вы зарегистрировались в Twinfield.

2) объем параметр, как показано выше, должен присутствовать и иметь то же значение, что и приведенное выше.

3) подтвердите ваш client_id & client_secret

Если все пойдет хорошо, вам будет показана страница входа в Twinflield, где вам нужно будет войти, используя свои учетные данные. После успешного входа вы будете перенаправлены на страницу разрешений, чтобы в основном предоставить доступ к вашему приложению для доступа к данным Twinfield.
Как только вы нажмете «Разрешить», вы будете перенаправлены обратно на конечную точку, которую вы указали с помощью кода авторизации.

ШАГ 2:

Следующий шаг — вызвать Twinfield accessTokenUri.
https://login.twinfield.com/auth/authentication/connect/token
со следующими заголовками

header.add("code",authorizationCodeFromStep1);
header.add("redirect_uri", yourRegisteredRedirectUri);
header.add("grant_type", "authorization_code");
header.add("client_id", "Demorent");
header.add("client_secret", "/iY7gyWn3Hkdgs4XzUG66SDyPNkk177x3A==");

Если все переданные выше параметры верны, вы получите ответ с id_token, accessToken, refreshToken, token_type и expires_in

1

По вопросам рекламы [email protected]