CURL로 Bearer 토큰을 설정하는 올바른 방법


87

API 끝점에서 Bearer 토큰을 가져오고 다음을 설정합니다.

$authorization = "Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"

다음으로 CURL을 사용하여 보안 끝점에 액세스하고 싶지만 Bearer 토큰을 설정하는 방법과 위치를 잘 모르겠습니다.

나는 이것을 시도했지만 작동하지 않습니다.

 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization ));
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $result = curl_exec($ch);
    curl_close($ch);
    return json_decode($result);

편집하다:

문서에 따르면 https://apigility.org/documentation/auth/authentication-oauth2 와 같이 전달자 토큰을 사용해야합니다.

GET /oauth/resource HTTP/1.1
Accept: application/json
Authorization: Bearer 907c762e069589c2cd2a229cdae7b8778caa9f07

이 PHP입니까? 서버는이 토큰이 어떻게 전송 될 것으로 예상합니까? 헤더?

안녕하세요-예, 이것은 PHP입니다. 일반적으로 베어러 토큰은 헤더로 설정됩니다.
HappyCoder

헤더의 이름은 무엇입니까?

문서에서 편집을 추가했습니다.
HappyCoder

답변:


120

바꾸다:

$authorization = "Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"

와:

$authorization = "Authorization: Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274";

유효하고 작동하는 Authorization 헤더로 만듭니다.


안녕-이것은 내가 시도한 것이지만 동일한 문제가 있습니다. 우편 배달부에서도 작동하지 않기 때문에 문제가 Apigility 업데이트와 관련이 있다고 생각합니다.
HappyCoder

ApiGility를 이전 안정 버전으로 롤백하여이 문제를 해결했습니다. 귀하의 의견에 감사드립니다. 제 해결책은 아니지만 비슷한 문제를 가진 다른 사람들을위한 해결책이며 저를 올바른 길로 인도했습니다. 입력 해 주셔서 감사합니다!
HappyCoder


38

데이터를 보내거나 검색 할 수있는 cURL 함수입니다. OAuth를 지원하는 모든 PHP 앱에서 작동해야합니다.

    function jwt_request($token, $post) {

       header('Content-Type: application/json'); // Specify the type of data
       $ch = curl_init('https://APPURL.com/api/json.php'); // Initialise cURL
       $post = json_encode($post); // Encode the data array into a JSON string
       $authorization = "Authorization: Bearer ".$token; // Prepare the authorisation token
       curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization )); // Inject the token into the header
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
       curl_setopt($ch, CURLOPT_POST, 1); // Specify the request method as POST
       curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // Set the posted fields
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // This will follow any redirects
       $result = curl_exec($ch); // Execute the cURL statement
       curl_close($ch); // Close the cURL connection
       return json_decode($result); // Return the received data

    }

단방향 또는 양방향 요청 내에서 사용 :

$token = "080042cad6356ad5dc0a720c18b53b8e53d4c274"; // Get your token from a cookie or database
$post = array('some_trigger'=>'...','some_values'=>'...'); // Array of data with a trigger
$request = jwt_request($token,$post); // Send or retrieve data

누군가 반대표를 추가했습니다. 아래 댓글에 자세히 설명해 주시겠습니까?
SergeDirect

2
고마워요 Serge ... 이런 전화로 너무 오래 고생했습니다. 모든 문서는 "http_build_query ()를 사용하여 POST 어레이를 빌드합니다."라고 말합니다. 하지만 작동하지 않습니다-OAuth의 특이성인지는 모르겠지만 여기에 표시된대로 필요한 것은 json_encode입니다. 가상 맥주를 보냈습니다.
anoldermark

2
@anoldermark 도움이되어 기쁩니다. 엄지 손가락을 올려 주셔서 감사합니다. 그것은 쓰기 품질의 답변에 시간과 노력이 필요 upvotes와 긍정적 인 코멘트 쓰기 좋은, 더 쓸 ... 장려된다)
SergeDirect

우리가 파일에 포스트 값을 얻을 것이다 어떻게 SergeDirect, @ APPURL.com/api/json.php 방법 authitication.Please JWT 일이 예를했다.
akgola


11

이것은 작동합니다

$token = "YOUR_BEARER_AUTH_TOKEN";
//setup the request, you can also use CURLOPT_URL
$ch = curl_init('API_URL');

// Returns the data/output as a string instead of raw data
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//Set your auth headers
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   'Content-Type: application/json',
   'Authorization: Bearer ' . $token
   ));

// get stringified data/output. See CURLOPT_RETURNTRANSFER
$data = curl_exec($ch);

// get info about the request
$info = curl_getinfo($ch);
// close curl resource to free up system resources
curl_close($ch);


1

PHP 7.3에서 :

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BEARER);
curl_setopt($ch,CURLOPT_XOAUTH2_BEARER,$bearerToken);

0

대신 비공개 토큰 ( 예 : Gitlab API )으로 작업하는 경우 다음을 대체해야합니다.

$authorization = "Authorization: Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"

와:

$authorization = "PRIVATE-TOKEN 080042cad6356ad5dc0a720c18b53b8e53d4c274";


0
<?php
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "your api goes here",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer eyJ0eciOiJSUzI1NiJ9.eyJMiIsInNjb3BlcyI6W119.K3lW1STQhMdxfAxn00E4WWFA3uN3iIA"
  ),
 ));

$response = curl_exec($curl);
$data = json_decode($response, true);

echo $data;

?>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.