개요

네이버 클라우드(Ncloud) Archive Storage API를 이용하려고 할 때 먼저 인증 토큰을 생성하고 생성된 토큰을 이용해서 API로 Archive Storage에 접근해야 합니다. 여기서는 PHP로 API 인증 토큰을 생성하는 방법에 대해 우선 전체 소스코드를 살펴보고 다음으로 주요 코드를 상세하게 살펴보겠습니다.

API 정보

  • OpenStack Swift API : 2.15.1 (Pike)
  • OpenStack Keystone V3 API : v3.8

인증 토큰 생성 코드

  <?php

  // 전송해야 할 설정값
  $ncloud_accesskey = "네이버 클라우드 AccessKey";
  $ncloud_secretkey = "네이버 클라우드 SecretKey";
  $ncloud_domain_id = "Archive Storage 도메인 ID";
  $ncloud_project_id = "Archive Storage 프로젝트 ID";

  $api_server = "https://kr.archive.ncloudstorage.com:5000";
  $api_url = "/v3/auth/tokens";		 

  // http 호출 헤더값 설정
  $http_header = array();
  $http_header[0] = "Content-Type: application/json";

  // 전송할 값들을 배열 형태로 저장한다
  $postvars = [
  	"auth"=> [
  		"identity"=> [
  			"methods"=> [
  				"password"
  			],
  			"password"=> [
  				"user"=> [
  					"name"=> $ncloud_accesskey,
  					"password"=> $ncloud_secretkey,
  					"domain"=> [
  						"id"=> $ncloud_domain_id
  					]
  				]
  			]
  		],
  		"scope"=> [
  			"project"=> [
  				"id"=> $ncloud_project_id
  			]
  		]
  	]
  ];

  // 배열 형태로 저장한 값들을 json 형태로 변환해서 전송
  $json_portvars = json_encode($postvars);

  // api 호출
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $api_server.$api_url);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);	
  curl_setopt($ch, CURLOPT_POST, TRUE); //POST 방식으로 호출
  curl_setopt($ch, CURLOPT_HTTPHEADER, $http_header);
  curl_setopt($ch, CURLOPT_HEADER, TRUE); //response에 header 값도 수신
  curl_setopt($ch,CURLOPT_POSTFIELDS, $json_portvars);

  $response = curl_exec($ch);

  curl_close($ch);

  if ($response)
  {
  	// X-Subject-Token 토큰 값은 request body가 아닌 header로 전달되므로
  	// header를 분리해서 배열에 저장한다 
  	$headers = array();
  	$header_text = substr($response, 0, strpos($response, "\r\n\r\n"));

  	foreach (explode("\r\n", $header_text) as $i => $line) 
  	{
  		if ($i === 0)
  		{
  		   $headers["http_code"] = $line;
  		}
  		else
  		{
  		   list ($key, $value) = explode(": ", $line);
  		   $headers[$key] = $value;
  		}
  	}
	
	// 인증 토큰 확인
  	$x_auth_token = $headers["X-Subject-Token"]; 
  	echo($x_auth_token);

  	//var_dump($headers);
  	//echo("<hr>");
  	//var_dump($response);
  } 
  else 
  {
  	echo "Curl error: " . curl_error($ch);
  }
?>
  

코드 상세 설명

API 인증 Key 생성

네이버 클라우드 API 인증키는 [콘솔] - [서브 계정] - [서브 계정 세부 정보] - [Access Key]탭에서 Access Key ID와 Secret Key를 가져오셔야 하며, 아직 만들어진 Key가 없다면 새로 만드셔야 합니다.

Ncloud(네이버 클라우드) API 인증키를 생성하는 방법

Archive Storage API 이용 정보

    $ncloud_domain_id = "Archive Storage 도메인 ID";
  $ncloud_project_id = "Archive Storage 프로젝트 ID";
  

Archive Storage API 이용을 위한 Domain ID와 Project ID는 [네이버 클라우드 포탈] - [Archive Storage]에서 [API 이용 정보 확인] 버튼을 클릭하면 확인할 수 있습니다.

PHP로 Ncloud Archive Storage API 인증 토큰 생성하는 방법

[API 이용 정보 확인] 창에서 Domain ID와 Project ID를 확인하고, PHP 소스코드에 입력합니다.

PHP로 Ncloud Archive Storage API 인증 토큰 생성하는 방법

API 서버와 URL 설정

    $api_server = "https://kr.archive.ncloudstorage.com:5000";
  $api_url = "/v3/auth/tokens";
  

Archive Storage API 서버와 토큰 생성을 위한 URL 정보는 위와 같습니다.

HTTP 호출 header 값 설정

    $http_header = array();
  $http_header[0] = "Content-Type: application/json";
  

HTTP header에는 json 형태로 호출한다는 것을 설정합니다.

전송할 값 설정

    // 전송할 값들을 배열 형태로 저장
  $postvars = [
  	"auth"=> [
  		"identity"=> [
  			"methods"=> [
  				"password"
  			],
  			"password"=> [
  				"user"=> [
  					"name"=> $ncloud_accesskey,
  					"password"=> $ncloud_secretkey,
  					"domain"=> [
  						"id"=> $ncloud_domain_id
  					]
  				]
  			]
  		],
  		"scope"=> [
  			"project"=> [
  				"id"=> $ncloud_project_id
  			]
  		]
  	]
  ];

  // 배열 형태로 저장한 값들을 json 형태로 변환해서 전송
  $json_portvars = json_encode($postvars);
  

네이버 클라우드 AccessKey, SecretKey, Archive Storage 도메인 ID, 프로젝트 ID를 전송하기 위해 지정된 형태의 배열로 저장한 후에 json 형태로 변환합니다. 물론 처음부터 json 형태로 저장해도 됩니다.

API 호출

    $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $api_server.$api_url);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);	
  curl_setopt($ch, CURLOPT_POST, TRUE); //POST 방식으로 호출
  curl_setopt($ch, CURLOPT_HTTPHEADER, $http_header);
  curl_setopt($ch, CURLOPT_HEADER, TRUE); //response에 header 값도 수신
  curl_setopt($ch,CURLOPT_POSTFIELDS, $json_portvars);

  $response = curl_exec($ch);
  curl_close($ch);
  

이제 위에서 준비한 값들을 사용해서 API를 호출합니다.
curl_setopt($ch, CURLOPT_HEADER, TRUE); 는 Response에 body 뿐만 아니라 header 값도 수신하기 위해 설정합니다.

API 인증 토큰 분리

    if ($response)
  {
  	$headers = array();
  	$header_text = substr($response, 0, strpos($response, "\r\n\r\n"));

  	foreach (explode("\r\n", $header_text) as $i => $line) 
  	{
  		if ($i === 0)
  		{
  		   $headers["http_code"] = $line;
  		}
  		else
  		{
  		   list ($key, $value) = explode(": ", $line);
  		   $headers[$key] = $value;
  		}
  	}
	
	// 인증 토큰 확인
  	$x_auth_token = $headers["X-Subject-Token"]; 
  	echo($x_auth_token);

  	//var_dump($headers);
  	//echo("<hr>");
  	//var_dump($response);
  } 
  

API 인증 토큰값은 X-Subject-Token이라는 이름으로 request body가 아닌 header로 전달되므로 header를 분리해서 배열에 저장합니다. 실제 전송되는 header 값은 아래와 같은 형태입니다.

  HTTP/1.1 201 Created 
Date: Thu, 11 Nov 2021 07:59:32 GMT 
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips mod_wsgi/3.4 Python/2.7.5 
X-Subject-Token: gAAAAABhjM1lbeTW3Vq......중간 생략 ......txWYsWGrC1siPt8CE0rs_KgNMTQ 
Vary: X-Auth-Token 
x-openstack-request-id: req-1ce......중간 생략 ......a85eb5b 
Content-Length: 1762 
Content-Type: application/json
  

인증 토큰 유효 시간

API 인증 토큰의 유효 시간은 24시간이고 삭제 요청을 호출하면 삭제할 수 있습니다.

참고 URL

  1. Archive Storage API 기본 가이드
    https://api.ncloud-docs.com/docs/common-archivestorageapi-archivestorageapi

  2. OpenStack Keystone V3 API 가이드
    https://docs.openstack.org/api-ref/identity/v3/

문서 업데이트 내역

날짜 내용
2021-11-11 문서 최초 생성
2024-01-31 API 인증키 생성 방법 안내 변경
2024-08-12 API 인증키 생성 방법 안내 업데이트