Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php &引用;无效的“授权”;使用Twinfield Openid Oauth connect时的响应_Php_Openid Connect_Lumen 5.4_Twinfield - Fatal编程技术网

Php &引用;无效的“授权”;使用Twinfield Openid Oauth connect时的响应

Php &引用;无效的“授权”;使用Twinfield Openid Oauth connect时的响应,php,openid-connect,lumen-5.4,twinfield,Php,Openid Connect,Lumen 5.4,Twinfield,这是我用过的图书馆 当我调用Oauth登录时,这是一个问题。我已经用用户名和密码完成了几乎所有的API,但客户端希望使用Oauth。我认为这是一个问题。当我打电话给Oauth时,它总是显示: { "success": false, "error": "invalid_grant" } 这是我的证件。Clientid和clientsecret是从mail和从Openid Twinfield链接设置的重定向uri中获得的。如果凭证有任何错误,请纠正我 clientId : Demo

这是我用过的图书馆

当我调用Oauth登录时,这是一个问题。我已经用用户名和密码完成了几乎所有的API,但客户端希望使用Oauth。我认为这是一个问题。当我打电话给Oauth时,它总是显示:

{
    "success": false,
    "error": "invalid_grant"
}
这是我的证件。Clientid和clientsecret是从mail和从Openid Twinfield链接设置的重定向uri中获得的。如果凭证有任何错误,请纠正我

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;
}

首先,
invalid_grant
是标准的OAuth 2.0错误参数。由于OpenID Connect是在OAuth 2.0上构建的,因此接收此响应是有效的。如果您查看,您会发现以下解释

无效的授权

提供的授权授权(例如授权 代码、资源所有者凭据)或刷新令牌无效 无效、过期、吊销,与重定向不匹配 在授权请求中使用的URI,或已颁发给 另一个客户

正如它所解释的,它可以是重定向URI、资源所有者凭据等任何内容。但我发现您的代码与授权代码有关

    // Here pass the authorization code 
    $accessToken  = $provider->getAccessToken("authorization_code", ["code" =>'NLA000067']);
您是否使用硬编码的授权码(NLA000067)?这是错误的。授权码授予的第一步是获取授权码。然后,只有您可以执行令牌请求。您从授权请求中获取授权代码,但我看不出您正在这样做

如果是这种情况,您得到的错误响应是完全有效的。如上所述,无效的授权是由无效的授权代码引起的


p、 s-May-be链接将引导您纠正问题

@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) 重定向uri必须与您在Twinfield注册的uri完全相同

2) 如上所示的范围参数应该存在,并且与上面给出的值相同

3) 验证您的客户id和客户机密

如果一切顺利,您将看到Twinflield登录页面,在该页面中,您需要使用凭据登录。成功登录后,您将被重定向到权限授予页面,基本上授予您的应用程序访问Twinfield数据的权限。 单击“许可”后,将重定向回使用授权代码指定的端点

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

下一步是调用Twinfield accessTokenUri 使用以下标题

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_的响应,在

中您可以从这个库中获得更多信息吗<代码>无效的授权可能不足以让读者继续阅读。它是否写入日志文件?不,只有响应。您应该已经集成到laravel或lumen中。尽管如此,这听起来仍然缺少帮助您(和读者)调试的信息。是否有一个测试OAuth服务器,您可以连接到它,以查看它认为是错误的东西?看起来你们目前正在调试盲板,必须有一种方法来帮助你们确定是哪一位绊倒了你们。您的OAuth是针对Twinfield还是另一个OAuth提供商?必须在那里提供office代码,它是“NLA000067”。请查看链接@AnandPandey。您确定吗?你查过链接了吗?授权码不是一个常数。!至少这不是Oauth和OpenID连接设计的。!好吧,我不确定bcaz我没有在这方面工作,但似乎它给出了一个例子。我遵循这个例子。@AnandPandey请遵循我提供的例子。这是遵循OpenID Connect授权代码流的标准方法。我想讨论一些问题。我们现在可以聊天吗?