我正在尝试使用第三方作为IdP进行身份验证。这使用标准的OAuth流程,但由于它仍在开发中,因此我不确定它是否已在IdP端正确实现。我正在寻找有关我可能在做错什么方面的指导。
因此我尝试使用curl和guzzle,但两者却获得了不同的结果。
使用Guzzle,我最终收到415错误:
客户端错误:
POST https://xyz/oauth2/token
导致415 Unsupported Media Type
响应
有了cURL,我得到了响应
“”
尽管有了Postman,我从他们这边获得了错误响应,如下所示:
{ “ error_description”:“授予无效;代码错误”, “错误”:“ invalid_grant” }
哪个可能是正确的。
这是“狂饮”请求:
$client = new Client(); $stream = json_encode(array( 'code' => $request['code'] , 'client_id' => $clientID , 'grant_type' => $grant , 'redirect_uri' => $redirectURI , 'client_secret' => $clientSecret )); try { $r = $client->request('POST', 'https://xyz/oauth2/token?', ['headers' => ['Authorization' => 'Basic base64XxYyZzCredentials==', 'Content-Type' => 'application/json', 'Accept' => 'application/json'], 'body' => $stream]); } catch (ClientException $e) { It enters here }
这是cURL请求:
$curl = curl_init(); $auth = 'Basic ' . base64_encode($clientID . ':' . $clientSecret); $headers = [ 'Authorization: ' . $auth, 'Content-Type: application/json' ]; $stream = json_encode(array( 'code' => $_REQUEST['code'], 'client_id' => $clientID , 'grant_type' => $grant , 'redirect_uri' => $redirectURI , 'client_secret' => $clientSecret )); curl_setopt_array($curl, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_URL => $url, CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $stream, CURLOPT_HTTPHEADER => $headers ]); $response = curl_exec($curl); curl_close($curl); dd($response);
使用邮递员,我在主体->表单数据中填充代码,client_id,redirect_uri,client_secret和Grant_type,并在标头中使用Content-Type和Authorization。
我希望从他们的IdP获得令牌,或者至少获得与Postman相同的结果,但是我没有得到。
下一步是嗅探服务器发送的内容,以验证POST是否正确发送,但是如果有人指出我对PHP代码所做的错误操作,我将不胜感激。