Google 데이터 프로토콜 클라이언트 라이브러리의 AuthSub

경고: 이 페이지는 Google의 이전 API인 Google Data API에 관한 것으로, Google Data API 디렉터리에 표시된 API 중 상당수가 최신 API로 대체된 API입니다. 특정 새 API에 대한 자세한 내용은 새 API 문서를 참조하세요. 최신 API를 사용하여 요청을 승인하는 방법은 Google 계정 인증 및 승인을 참고하세요.

이 문서에서는 Google Data API 클라이언트 라이브러리를 사용하여 Google의 웹 애플리케이션용 AuthSub 인증에 연결하는 방법을 설명합니다.

AuthSub 인터페이스를 사용하면 웹 기반 애플리케이션이 사용자를 대신하여 Google 서비스에 액세스할 수 있습니다. 높은 수준의 보안을 유지하기 위해 AuthSub 인터페이스를 사용하면 애플리케이션이 사용자의 계정 로그인 정보를 처리하지 않고 인증 토큰을 가져올 수 있습니다.

Google Data API 클라이언트 라이브러리는 웹 애플리케이션에서 AuthSub를 사용하는 데 도움이 되는 메서드를 제공합니다. 구체적으로는 요청 URL을 구성하고, 일회용 인증 토큰을 획득하고, 세션 토큰의 일회용 토큰을 교환하고, 요청을 서명하는 메서드가 있습니다.

참고: 자바스크립트 클라이언트 라이브러리에는 AuthSubJS라고 하는 자체 버전의 AuthSub가 있습니다. 자바스크립트 애플리케이션에서 AuthSubJS를 사용하는 방법은 자바스크립트 클라이언트 라이브러리에 'AuthSub' 인증 사용을 참조하세요.

대상

이 문서는 웹 기반 애플리케이션이 Google Data API 클라이언트 라이브러리를 사용하여 사용자를 대신하여 Google 서비스에 액세스하기를 원하는 프로그래머를 대상으로 합니다.

이 문서에서는 AuthSub 인터페이스와 AuthSub를 웹 애플리케이션에 통합하는 일반적인 프로세스에 익숙하다고 가정합니다. AuthSub의 프로토콜에 대한 자세한 설명은 웹 애플리케이션의 AuthSub 인증을 참조하세요.

클라이언트 라이브러리 없이 AuthSub 및 Google Data API 사용

웹 애플리케이션 클라이언트가 AuthSub를 인증 시스템으로 사용하여 Google 데이터 서비스와 상호작용하도록 하려면 웹 애플리케이션을 위한 AuthSub 인증을 알아야 합니다. Google 데이터 API 클라이언트 라이브러리를 사용하지 않아도 됩니다.

애플리케이션에서 AuthSub를 사용하여 사용자를 인증하는 방법은 다음과 같습니다.

애플리케이션은 적절한 AuthSub URL을 생성한 다음 사용자가 로그인할 수 있도록 해당 URL로 보냅니다. AuthSub 시스템은 사용자를 지정된 사이트의 URL로 다시 보내고 일회용 토큰을 반환합니다. 애플리케이션은 필요에 따라 이 토큰을 세션 토큰으로 교환합니다. 그런 다음 애플리케이션이 서비스에 전송하는 각 요청과 함께 토큰을 승인 헤더로 전송합니다.

Google Data API 클라이언트 라이브러리는 다양한 세부정보를 처리하여 이 승인 프로세스를 간소화합니다. 이 문서에서는 그 방법을 설명합니다.

AuthSub 및 Google Data API 작업: 클라이언트 라이브러리 예

이 섹션에서는 Google Data API 클라이언트 라이브러리 메서드를 사용하여 AuthSub 문서의 'AuthSub 사용' 섹션에 설명된 단계를 따르는 예를 보여줍니다.

이 예에서는 AuthSub 인터페이스를 Google Calendar와 상호작용하는 웹 애플리케이션에 통합했습니다 (예시를 따르기 위해 Google Calendar에 대해 몰라도 됨). 이 예시에서는 웹 애플리케이션이 example.com에서 호스팅된다고 가정합니다.

사용할 토큰 유형(session=0 또는 session=1)을 결정합니다.

일회용 토큰(session=0) 또는 세션 토큰(session=1)을 사용할 수 있습니다. 이 문서에서는 여러 API 요청을 보내는 애플리케이션에서 더 유용하므로 세션 토큰을 사용합니다. AuthSub 문서에 설명된 것처럼 웹 애플리케이션에서 세션 토큰을 사용하려면 토큰 스토리지를 직접 관리해야 합니다. 이 문서에서는 토큰 관리에 대해 다루지 않습니다. 또한 session=0으로 요청된 토큰은 나중에 장기 세션 토큰으로 교환 (업그레이드)할 수 없습니다.

웹 애플리케이션 등록 여부 결정(secure=0 또는 secure=1)

AuthSub는 등록되지 않음, 등록됨, 강화된 보안으로 등록된 3가지 모드로 사용될 수 있습니다. 이 문서의 나머지 부분에서는 마지막 옵션을 보안 AuthSub라고 하겠습니다. 미등록/등록 모드는 보안 AuthSub보다 설정이 더 쉬우나 강화된 보안에 보안 토큰을 사용하는 것이 좋습니다.

등록 방법

웹 기반 애플리케이션용 등록을 선택하면 애플리케이션에 다음과 같은 이점이 있습니다.

  1. 더 높은 수준의 보안.
  2. Google에서 신뢰하는 업체 (Google 승인 페이지에서 사용자에게 경고가 표시되지 않음)

등록됨 + 보안 AuthSub

보안 AuthSub를 결정하려면 웹 애플리케이션 등록 외에도 자체 서명 RSA 비공개 키 및 공개 인증서 쌍을 생성해야 합니다. X.509 인증서를 만드는 예는 등록 모드에서 사용할 키 및 인증서 생성(아래)을 참조하세요.

데이터 액세스 범위 결정

각 Google 서비스는 토큰에 대한 사용자 데이터 액세스 권한을 결정하고 범위를 좁힐 수 있는 scope 값을 정의합니다. 사용 가능한 scope 값의 목록은 FAQ를 참고하세요.

Google Calendar API와 상호작용하기로 결정했으므로 scopehttp://www.google.com/calendar/feeds/이어야 합니다.

참고: 더 세부적인 제한이 필요한 경우를 제외하고 범위 값을 항상 가장 넓은 URL로 설정합니다. 예를 들어 scope=http://www.google.com/calendar/feeds/default/allcalendars/full와 같이 범위를 좁히면 토큰의 액세스 권한이 allcalendars/full 피드로 제한됩니다. scope=http://www.google.com/calendar/feeds/을(를) 사용하면 모든 캘린더 피드(http://www.google.com/calendar/feeds/*)에 대한 액세스가 허용됩니다.

다중 범위 토큰

여러 Google Data API에 액세스하는 토큰을 만들려면 각 범위를 URL로 인코딩된 공백으로 구분합니다. 아래 예에서는 사용자의 Google 주소록과 Google 캘린더 데이터에 모두 액세스할 수 있는 토큰을 만듭니다.

scope=http://www.google.com/calendar/feeds/%20http://www.google.com/m8/feeds/

일회용 인증 토큰 요청

지정된 사용자 및 서비스의 AuthSub 토큰을 획득하려면 애플리케이션에서 사용자를 AuthSubRequest URL로 리디렉션해야 합니다. 그러면 Google 계정에 로그인하라는 메시지가 표시됩니다. AuthSubRequest URL에 대한 자세한 내용은 전체 웹 애플리케이션용 AuthSub 인증을 참조하세요.

애플리케이션에서 AuthSubRequest URL을 구성하려면 각 클라이언트 라이브러리에 다음을 사용합니다.

자바

import com.google.gdata.client.*;

String nextUrl = "http://www.example.com/RetrieveToken.jsp";
String scope = "http://www.google.com/calendar/feeds/";
boolean secure = false;  // set secure=true to request secure AuthSub tokens
boolean session = true;
String authSubUrl = AuthSubUtil.getRequestUrl(nextUrl, scope, secure, session);

G Suite 도메인의 사용자를 인증하려면 다음 안내를 따르세요.

import com.google.gdata.client.*;

String hostedDomain = "example.com";
String nextUrl = "http://www.example.com/RetrieveToken.jsp";
String scope = "http://www.google.com/calendar/feeds/";
boolean secure = false;  // set secure=true to request AuthSub tokens
boolean session = true;
String authSubUrl = AuthSubUtil.getRequestUrl(hostedDomain, nextUrl, scope, secure, session);

.NET

using Google.GData.Client;

String nextUrl = "http://www.example.com/RetrieveToken.aspx";
String scope = "http://www.google.com/calendar/feeds/";
bool secure = false; // set secure=true to request secure AuthSub tokens
bool session = true;
String authSubUrl = AuthSubUtil.getRequestUrl(nextUrl, scope, secure, session);

G Suite 도메인의 사용자를 인증하려면 다음 안내를 따르세요.

using Google.GData.Client;

String hostedDomain = "example.com";
String nextUrl = "http://www.example.com/RetrieveToken.aspx";
String scope = "http://www.google.com/calendar/feeds/";
bool secure = false; // set secure=true to request secure AuthSub tokens
bool session = true;
String authSubUrl = AuthSubUtil.getRequestUrl(hostedDomain, nextUrl, scope, secure, session);

PHP

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_AuthSub');

$nextUrl = 'http://www.example.com/RetrieveToken.php';
$scope = 'http://www.google.com/calendar/feeds/';
$secure = 0;  // set $secure=1 to request secure AuthSub tokens
$session = 1;
$authSubUrl = Zend_Gdata_AuthSub::getAuthSubTokenUri($nextUrl, $scope, $secure, $session);

G Suite 도메인의 사용자를 인증하려면 다음 안내를 따르세요.

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_AuthSub');

$hostedDomain = 'example.com';
$nextUrl = 'http://www.example.com/RetrieveToken.php';
$scope = 'http://www.google.com/calendar/feeds/';
$secure = 0;  // set $secure=1 to request secure AuthSub tokens
$session = 1;
$authSubUrl = Zend_Gdata_AuthSub::getAuthSubTokenUri($nextUrl, $scope, $secure, $session) . '&hd=' . $hostedDomain;

Python

import gdata.auth

next = 'http://www.example.com/RetrieveToken.pyc'
scope = 'http://www.google.com/calendar/feeds/'
secure = False  # set secure=True to request secure AuthSub tokens
session = True
auth_sub_url = gdata.auth.GenerateAuthSubRequestUrl(next, scope, secure=secure, session=session)

G Suite 도메인의 사용자를 인증하려면 다음 안내를 따르세요.

import gdata.auth

hosted_domain = 'example.com'
next = 'http://www.example.com/RetrieveToken.pyc'
scope = 'http://www.google.com/calendar/feeds/'
secure = False  # set secure=True to request secure AuthSub tokens
session = True
auth_sub_url = gdata.auth.GenerateAuthSubRequestUrl(next, scope, secure=secure, session=session, domain=hosted_domain)

'다음' URL을 구성한 후 애플리케이션은 다양한 방법으로 이 URL을 사용하여 사용자를 AuthSubRequest 핸들러로 보낼 수 있습니다. 가장 일반적인 방법은 사용자에게 애플리케이션의 Google 계정 액세스를 위해 링크를 따라 이동해야 함을 알리는 페이지를 표시한 후 링크에 요청 URL을 첨부하는 것입니다. 예를 들어 웹 앱에 다음 문자열을 출력할 수 있습니다.

String authorizationUrl =
        "<p>MyApp needs access to your Google Calendar account to read your Calendar feed. " +
        "To authorize MyApp to access your account, <a href=\"" + authSubUrl + "\">log in to your account</a>.</p>";

사용자가 Google의 AuthSub 페이지 링크를 따라 로그인합니다. 그런 다음 AuthSub 시스템은 제공된 '다음' URL을 사용하여 사용자를 애플리케이션으로 다시 리디렉션합니다.

일회용 토큰 추출

Google이 애플리케이션으로 다시 리디렉션되면 토큰이 '다음' URL에 쿼리 매개변수로 추가됩니다. 위 예의 경우 사용자가 로그인하면 Google에서 http://www.example.com/RetrieveToken?token=DQAADKEDE과 같은 URL로 리디렉션됩니다. 애플리케이션은 URL 쿼리 매개변수에서 토큰 값을 추출해야 합니다.

애플리케이션이 AuthSub 시스템으로 사용자 쿠키를 보내기 전에 사용자 브라우저에서 인증 쿠키를 설정한 경우, Google은 '다음' URL로 리디렉션할 때 인증 쿠키를 읽고 어떤 사용자가 해당 URL에 도착했는지 알 수 있습니다. 이러한 쿠키를 사용하여 애플리케이션의 사용자 ID를 Google에서 검색한 AuthSub 토큰과 연결할 수 있습니다.

클라이언트 라이브러리는 일회용 토큰을 추출하는 편의 메서드를 제공합니다.

자바

String singleUseToken = AuthSubUtil.getTokenFromReply(httpServletRequest.getQueryString());

.NET

String singleUseToken = Request.QueryString["token"];
// or
String singleUseToken = AuthSubUtil.getTokenFromReply(new Uri(Request.QueryString));

PHP

$singleUseToken = $_GET['token'];

Python

current_url = 'http://' + req.hostname + req.unparsed_uri
# Unlike the other calls, extract_auth_sub_token_from_url() will create an AuthSubToken or SecureAuthSubToken object.
# Use str(single_use_token) to return the token's string value.
single_use_token = gdata.auth.extract_auth_sub_token_from_url(current_url)

보안 AuthSub를 사용하는 경우 SecureAuthSubToken가 생성되도록 RSA 비공개 키를 설정해야 합니다.

f = open('/path/to/yourRSAPrivateKey.pem')
rsa_key = f.read()
f.close()
current_url = 'http://' + req.hostname + req.unparsed_uri
# Unlike the other calls, extract_auth_sub_token_from_url() will create an AuthSubToken or SecureAuthSubToken object.
# Use str(single_use_token) to return the token's string value.
single_use_token = gdata.auth.extract_auth_sub_token_from_url(current_url, rsa_key=rsa_key)

세션 토큰 요청

URL에서 가져오는 토큰은 항상 일회용 토큰입니다. 다음 단계는 전체 웹 애플리케이션용 AuthSub 인증 문서에 설명된 대로 AuthSubSessionToken URL을 사용하여 장기 세션 토큰의 토큰을 업그레이드하는 것입니다. 보안 AuthSub를 사용하는 경우, 교환하기 전에 RSA 비공개 키를 설정해야 합니다. 다음은 각 클라이언트 라이브러리를 사용하는 몇 가지 예입니다.

자바

import com.google.gdata.client.*;
import com.google.gdata.client.calendar.*;

String sessionToken = AuthSubUtil.exchangeForSessionToken(singleUseToken, null);

CalendarService calendarService = new CalendarService("google-ExampleApp-v1.0");
calendarService.setAuthSubToken(sessionToken, null);

// ready to interact with Calendar feeds

보안 AuthSub를 위해 RSA 비공개 키를 null를 전달하는 대신 exchangeForSessionToken에 전달합니다.

import com.google.gdata.client.*;
import com.google.gdata.client.calendar.*;

java.security.PrivateKey privateKey =
    AuthSubUtil.getPrivateKeyFromKeystore("AuthSubExample.jks", "privKeyPa$$word", "AuthSubExample", "privKeyPa$$word");
String sessionToken = AuthSubUtil.exchangeForSessionToken(singleUseToken, privateKey);

CalendarService calendarService = new CalendarService("google-ExampleApp-v1.0");
calendarService.setAuthSubToken(sessionToken, privateKey);

// ready to interact with Calendar feeds

.NET

using Google.GData.Client;
using Google.GData.Calendar;

String sessionToken = AuthSubUtil.exchangeForSessionToken(singleUseToken, null).ToString();

GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("cl", "google-ExampleApp-v1.0");
authFactory.Token = (String) sessionToken;

CalendarService calendarService = new CalendarService(authFactory.ApplicationName);
calendarService.RequestFactory = authFactory;

// ready to interact with Calendar feeds

보안 AuthSub를 위해 RSA 비공개 키를 null를 전달하는 대신 exchangeForSessionToken에 전달합니다.

using Google.GData.Client;
using Google.GData.Calendar;

protected AsymmetricAlgorithm getRsaKey()
{
  X509Certificate2 cert = new X509Certificate2("C:/MyAspSite/test_cert.pfx", "privKeyPa$$word");
  RSACryptoServiceProvider privateKey = cert.PrivateKey as RSACryptoServiceProvider;
  return privateKey;
}

AsymmetricAlgorithm rsaKey = getRsaKey();
String sessionToken = AuthSubUtil.exchangeForSessionToken(singleUseToken, rsaKey).ToString();

GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("cl", "google-ExampleApp-v1.0");
authFactory.Token = (String) sessionToken;
authFactory.PrivateKey = rsaKey;

CalendarService calendarService = new CalendarService(authFactory.ApplicationName);
calendarService.RequestFactory = authFactory;

// ready to interact with Calendar feeds

PHP

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_Calendar');

$sessionToken = Zend_Gdata_AuthSub::getAuthSubSessionToken($singleUseToken);

// Create a Calendar service object and set the session token for subsequent requests
$calendarService = new Zend_Gdata_Calendar(null, 'google-ExampleApp-v1.0');
$calendarService->setAuthSubToken($sessionToken);

// ready to interact with Calendar feeds

안전한 AuthSub를 위해 교환 시 먼저 Zend_Gdata_HttpClient를 설정하고 setAuthSubPrivateKeyFile()을 사용하여 RSA 비공개 키를 설정해야 합니다.

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_Calendar');

$client = new Zend_Gdata_HttpClient();
$client->setAuthSubPrivateKeyFile('/path/to/myrsakey.pem', null, true);
$sessionToken = Zend_Gdata_AuthSub::getAuthSubSessionToken($singleUseToken, $client);

$calendarService = new Zend_Gdata_Calendar($client, 'google-ExampleApp-v1.0');
$calendarService->setAuthSubToken($sessionToken);

// ready to interact with Calendar feeds

Python

import gdata.calendar
import gdata.calendar.service

calendar_service = gdata.calendar.service.CalendarService()
calendar_service.UpgradeToSessionToken(single_use_token)  # calls gdata.service.SetAuthSubToken() for you

# ready to interact with Calendar feeds

참고: gdata.auth.extract_auth_sub_token_from_url(url, rsa_key=rsa_key)을 사용하여 일회용 토큰을 추출하면 보안 AuthSub에서 이 프로세스를 동일하게 적용할 수 있습니다.

참고: 보안 AuthSub를 사용하면 비공개 키 자체가 네트워크를 통해 전송되지 않습니다. 클라이언트 라이브러리는 키 자체가 아니라 키로 요청에 서명하여 생성된 고유 서명을 전송합니다.

세션 토큰 사용

AuthSub 문서에 설명된 대로 세션 헤더를 사용하여 승인 헤더에 토큰을 배치하여 서버에 대한 요청을 인증할 수 있습니다.

세션 토큰을 설정한 후에는 토큰에 대해 걱정할 필요 없이 표준 Google Data API 클라이언트 라이브러리 호출을 사용하여 서비스와 상호작용할 수 있습니다. 자세한 내용은 클라이언트 라이브러리 문서 및 사용 중인 서비스와 언어에 대한 Google Data API 개발자 가이드를 참고하세요.

세션 토큰 정보 가져오기

클라이언트와 서버가 토큰의 매개변수에 동의하는지 테스트하려면 토큰을 AuthSubTokenInfo 핸들러에 전달하면 토큰에 대한 정보가 포함된 이름-값 쌍이 반환됩니다.

자바

Map<String, String> tokenInfo = AuthSubUtil.getTokenInfo(sessionToken, null);

보안 AuthSub를 사용하는 경우 RSA 비공개 키를 전달하세요.

Map<String, String> tokenInfo = AuthSubUtil.getTokenInfo(sessionToken, privateKey);

.NET

Dictionary<String, String> tokenInfo = AuthSubUtil.GetTokenInfo(sessionToken, null);

보안 AuthSub를 사용하는 경우 RSA 비공개 키를 전달하세요.

Dictionary<String, String> tokenInfo = AuthSubUtil.GetTokenInfo(sessionToken, privateKey);

PHP

$tokenInfo = Zend_Gdata_AuthSub::getAuthSubTokenInfo($sessionToken);

보안 AuthSub를 사용하는 경우 요청이 RSA 비공개 키로 서명되도록 Zend_Gdata_HttpClient를 전달합니다.

$tokenInfo = Zend_Gdata_AuthSub::getAuthSubTokenInfo($sessionToken, $client);

Python

token_info = calendar_service.AuthSubTokenInfo()

세션 토큰 취소

AuthSub 세션 토큰은 만료되지 않습니다. 클라이언트는 필요한 만큼 세션 토큰을 저장할 수 있습니다.

따라서 클라이언트가 세션 토큰을 사용하여 완료되면 AuthSub 문서에 설명된 대로 AuthSubRevokeToken 핸들러를 사용하여 토큰을 취소할 수 있습니다.

예를 들어 일반적인 세션과 유사한 방식으로 토큰을 관리하려는 경우 클라이언트는 사용자 세션 시작 시 토큰을 가져와서 사용자 세션 종료 시 취소할 수 있습니다.

토큰을 취소하려면 각 클라이언트 라이브러리에서 다음을 사용합니다.

자바

AuthSubUtil.revokeToken(sessionToken, null);

보안 AuthSub를 사용하는 경우 RSA 비공개 키를 전달하세요.

AuthSubUtil.revokeToken(sessionToken, privateKey);

.NET

AuthSubUtil.revokeToken(sessionToken, null);

보안 AuthSub를 사용하는 경우 RSA 비공개 키를 전달하세요.

AuthSubUtil.revokeToken(sessionToken, privateKey);

PHP

$wasRevoked = Zend_Gdata_AuthSub::AuthSubRevokeToken($sessionToken);

보안 AuthSub를 사용하는 경우 요청이 RSA 비공개 키로 서명되도록 Zend_Gdata_HttpClient를 전달합니다.

$wasRevoked = Zend_Gdata_AuthSub::AuthSubRevokeToken($sessionToken, $client);

Python

calendar_service.RevokeAuthSubToken()

추가 리소스 및 샘플

맨 위로

보안 AuthSub에 사용할 자체 서명 비공개 키 및 공개 인증서 생성

비공개 키는 각 요청에 포함되어야 하는 서명을 생성하는 데 사용됩니다. 인증서에 삽입된 공개 키는 Google에서 서명을 확인하는 데 사용됩니다. 공개 키는 PEM 형식의 X.509 인증서로 인코딩된 1024비트 RSA 키여야 합니다. 인증서는 등록 시 Google에 제출해야 합니다.

다음 섹션에서는 두 가지 특정 도구(OpenSSL 유틸리티와 자바의 keytool 유틸리티)를 사용하여 키와 인증서를 생성하는 방법을 보여주는 예시를 제공합니다.

이 예는 Google 데이터 API에만 국한되지 않습니다. 동일한 유틸리티를 사용하여 모든 용도로 키를 생성할 수 있습니다.

이 예에서는 회사의 이름이 My_Company이고 미국 캘리포니아주 마운틴뷰에 소재하고 도메인 이름은 example.com이라고 가정합니다.

OpenSSL을 사용하여 키 생성

다음 명령어를 사용하여 RSA 키 쌍과 해당 인증서를 만들 수 있습니다.

# Generate the RSA keys and certificate
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -sha1 -subj \
  '/C=US/ST=CA/L=Mountain View/CN=www.example.com' -keyout \
  myrsakey.pem -out /tmp/myrsacert.pem

경고: -nodes 매개변수를 포함하면 비밀번호가 없는 비공개 키가 생성되어 보호됩니다. 그러나 보안을 강화하기 위해 이 매개변수를 생략하는 것이 좋습니다.

-sha1 매개변수는 SHA1 서명을 생성하는 데 키를 사용하도록 지정합니다.

-subj 매개변수는 인증서가 나타내는 애플리케이션의 ID를 지정합니다.

-keyout 매개변수는 키를 포함할 파일을 지정합니다. 이 파일에는 민감한 정보가 포함되어 있으며 보호되어야 하며 다른 사람과 공유해서는 안 됩니다.

-out 매개변수는 인증서를 PEM 형식(등록 시 Google에 전송할 수 있음)으로 포함할 파일을 지정합니다.

.NET 클라이언트 키 생성

.NET 프레임워크는 PEM 형식으로 저장된 키 또는 인증서를 이해하지 못합니다. 따라서 .pem 파일을 만든 후에는 추가 단계가 필요합니다.

openssl pkcs12 -export -in test_cert.pem -inkey myrsacert.pem -out myrsacert.pfx -name "Testing Certificate"

이 단계에서는 비공개 키 및 인증서에서 PFX 파일이 생성됩니다. 이 파일을 .NET 클라이언트 라이브러리로 가져와 Google 데이터 API에 대한 요청에 디지털 서명할 수 있습니다.

자바 클라이언트의 키 생성

자바 클라이언트는 PKCS#8 형식의 비공개 키를 허용합니다. 위의 안내를 사용하여 키/인증서를 생성한 후 생성된 .pem 파일에서 .pk8 파일을 만듭니다.

openssl pkcs8 -in myrsakey.pem -topk8 -nocrypt -out myrsakey.pk8

또는 자바 키 저장소와 keytool 유틸리티를 사용하여 RSA 키 쌍과 해당 인증서를 만들 수 있습니다. 다음 명령을 사용하세요.

# Generate the RSA keys and certificate
keytool -genkey -v -alias Example -keystore ./Example.jks\
  -keyalg RSA -sigalg SHA1withRSA\
  -dname "CN=www.example.com, OU=Engineering, O=My_Company, L=Mountain  View, ST=CA, C=US"\
  -storepass changeme -keypass changeme

경고: 'changeme'은(는) 좋은 비밀번호가 아니며 단지 하나의 예일 뿐입니다.

-dname 매개변수는 인증서가 나타내는 애플리케이션의 ID를 지정합니다. -storepass 매개변수는 키 저장소를 보호하는 비밀번호를 지정합니다. -keypass 매개변수는 비공개 키를 보호하기 위한 비밀번호를 지정합니다.

ManageDomains 도구에서 사용할 수 있는 파일에 인증서를 작성하려면 다음 명령어를 사용합니다.

# Output the public certificate to a file
keytool -export -rfc -keystore ./Example.jks -storepass changeme \
  -alias Example -file mycert.pem

맨 위로