서버 API Unauthorized

임연지

2021.07.30읽음 2977

작성하신 내용은 누구나 볼 수 있습니다.

계정 이름, 도메인 이름, API ID, ConsumerKey 등의 비공개 정보는 기입하지마세요.

reference 내용 대로 서버 토큰을 부여받고

감사데이터 중 통화 기록 관련해서 데이터를 다운로드하고 싶었는데

자꾸 Unauthorized으로 반환됩니다.

제 코드가 잘못된 걸까요?

<?php
$apiId = '';
$jwt = '';
$url = 'https://auth.worksmobile.com/b/'.$apiId.'/server/token';
$data = array('grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', 'assertion' => $jwt);
$options = array(
'http' => array(
'header'  => "content-type : application/x-www-form-urlencoded; charset=UTF-8",
'method'  => 'POST',
'content' => http_build_query($data),
)
);
$context  = stream_context_create($options);
$getToken = file_get_contents($url, false, $context);
if($getToken === FALSE)
{exit("Fail");}
//var_dump($getToken);
echo "<br/>";
$consumerKey = '';
$accessToken = $getToken->access_token;
$url = 'https://audit.worksmobile.com/r/'.$apiId.'/audit/v2/log/contact/logs.csv?rangeName=domain&startDate=20210727&endDate=20210728&tenantId=******&domainId=******&serviceId=audit&apiId=downCsvLog';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$headers = array(
'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
'customerKey: '.$consumerKey,
'Authorization: Bearer '.$accessToken,
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
//for debug only!
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$resp = curl_exec($curl);
curl_close($curl);
var_dump($resp);
?>
결과는 다음과 같습니다
string(54) "{"code":401,"domain":"audit","message":"Unauthorized"}"
제공된 비밀키에서 openssl을 이용해 public key를 생성하고 jwt.io에서 jwt를 만드는 방식으로 jwt를 만들었는데 이게 잘못일까요?

댓글2

  • 업데이트 된 답글입니다.

    branches

    에러메시지를 보니 접속하면서 아마 토큰에서 막힌것 같아요
    소스코드로 봐서는 $jwt 가 빈값인데

    콘솔에서 다운받은 key파일를 읽어서 RS256 형식으로 전자서명을 한 뒤에 토큰발급 API (/server/token)에 던져보세요

    2021.07.30

    1
  • 업데이트 된 답글입니다.

    임연지 작성자

    아 소스코드에 토큰이나 아이디, 키 등은 모두 지우거나 *로 대체했습니다
    발급받은 비밀키를 가지고 퍼블릭키 생성해서 jwt.io에서 jwt 생성 후, 저 코드에서 accessToken을 받아오게 하고
    그걸 헤더에 넣어서 요청하는 것으로 했습니다

    2021.07.30

    0
이전 글할일 생성 화면 호출 방법 문의
다음 글메세지 봇과 1:N 대화방을 생성하여 알림을 받고 싶습니다.
목록

궁금한 점을 해결하지 못하셨나요?
지금 바로 NAVER WORKS 사용자들에게 물어보세요!