서버 API Unauthorized
작성하신 내용은 누구나 볼 수 있습니다.
계정 이름, 도메인 이름, 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
업데이트 된 답글입니다.
임연지 작성자
발급받은 비밀키를 가지고 퍼블릭키 생성해서 jwt.io에서 jwt 생성 후, 저 코드에서 accessToken을 받아오게 하고
그걸 헤더에 넣어서 요청하는 것으로 했습니다
2021.07.30
궁금한 점을 해결하지 못하셨나요?
지금 바로 NAVER WORKS 사용자들에게 물어보세요!