Ответ "Invalid_grant" при использовании Twinfield Openid Oauth connect - PullRequest
0 голосов
/ 11 июня 2018

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

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

{
    "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 ]

0 голосов
/ 12 февраля 2019

@ 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) должен присутствовать параметр scope , как показано выше, и с тем же значением, как указано выше

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

0 голосов
/ 14 июня 2018

Для начала 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']);

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

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

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

...