경고: 이 페이지는 Google의 이전 API인 Google Data API에 관한 내용이며, Google Data API 디렉터리에 나열된 API에만 관련이 있습니다. 이 API 중 상당수는 최신 API로 대체되었습니다. 특정 새 API에 관한 자세한 내용은 새 API의 문서를 참고하세요. 최신 API로 요청을 승인하는 방법에 대한 자세한 내용은 Google 계정 인증 및 승인을 참고하세요.
이 문서에서는 Google 데이터 API 클라이언트 라이브러리를 사용하여 Google의 웹 애플리케이션용 AuthSub 인증에 연결하는 방법을 설명합니다.
AuthSub 인터페이스를 사용하면 웹 기반 애플리케이션이 사용자를 대신하여 Google 서비스에 액세스할 수 있습니다. 높은 수준의 보안을 유지하기 위해 AuthSub 인터페이스를 사용하면 애플리케이션이 사용자의 계정 로그인 정보를 처리하지 않고도 인증 토큰을 가져올 수 있습니다.
Google Data API 클라이언트 라이브러리는 웹 애플리케이션에서 AuthSub를 사용하는 데 도움이 되는 메서드를 제공합니다. 특히 요청 URL을 구성하고, 일회용 인증 토큰을 획득하고, 일회용 토큰을 세션 토큰으로 교환하고, 요청에 서명하는 방법이 있습니다.
참고: JavaScript 클라이언트 라이브러리에는 AuthSubJS라는 자체 AuthSub 버전이 있습니다. JavaScript 애플리케이션에서 AuthSubJS를 사용하는 방법은 JavaScript 클라이언트 라이브러리로 'AuthSub' 인증 사용하기를 참고하세요.
잠재고객
이 문서는 Google Data API 클라이언트 라이브러리를 사용하여 사용자를 대신하여 웹 기반 애플리케이션이 Google 서비스에 액세스하도록 하려는 프로그래머를 대상으로 합니다.
이 문서에서는 사용자가 AuthSub 인터페이스와 웹 애플리케이션에 AuthSub를 통합하는 일반적인 프로세스에 익숙하다고 가정합니다. AuthSub 프로토콜에 관한 전체 설명은 웹 애플리케이션용 AuthSub 인증을 참고하세요.
클라이언트 라이브러리 없이 AuthSub 및 Google Data API 사용
인증 시스템으로 AuthSub를 사용하여 웹 애플리케이션 클라이언트가 Google 데이터 서비스와 상호작용하도록 하려면 웹 애플리케이션용 AuthSub 인증을 참고하세요. 원하지 않는 경우 Google Data API 클라이언트 라이브러리를 사용하지 않아도 됩니다.
다음은 애플리케이션이 AuthSub를 사용하여 사용자를 인증하는 방법의 개요입니다.
애플리케이션이 적절한 AuthSub URL을 구성한 다음 사용자가 로그인할 수 있도록 해당 URL로 사용자를 전송합니다. AuthSub 시스템은 사용자를 지정된 사이트의 URL로 다시 전송하고 일회용 토큰을 반환합니다. 애플리케이션은 선택적으로 해당 토큰을 세션 토큰으로 교환합니다. 그런 다음 애플리케이션은 애플리케이션이 서비스에 전송하는 각 요청과 함께 승인 헤더에 토큰을 전송합니다.
Google Data API 클라이언트 라이브러리는 다양한 세부정보를 처리하여 이 승인 프로세스를 간소화합니다. 이 문서에서는 방법을 설명합니다.
AuthSub 및 Google Data API 사용: 클라이언트 라이브러리 예
이 섹션에서는 Google Data API 클라이언트 라이브러리 메서드를 사용하여 AuthSub 문서의 'AuthSub 사용' 섹션에 설명된 단계를 따르는 예를 보여줍니다.
이 예에서는 Google Calendar와 상호작용하는 웹 애플리케이션에 AuthSub 인터페이스를 통합합니다 (예를 따르기 위해 Google Calendar에 대해 알 필요는 없음). 이 예시에서는 웹 애플리케이션이 example.com에서 호스팅된다고 가정합니다.
사용할 토큰 유형 (session=0 또는 session=1) 결정
일회용 토큰 (session=0) 또는 세션 토큰 (session=1)을 사용할 수 있습니다. 이 문서에서는 여러 API 요청을 수행하는 애플리케이션에서 더 유용한 세션 토큰을 사용합니다.
AuthSub 문서에서 설명한 대로 웹 애플리케이션에서 세션 토큰을 사용하기로 결정한 경우 토큰 저장소를 직접 관리해야 합니다. 이 문서에서는 토큰 관리에 대해 다루지 않습니다. 또한 session=0로 요청된 토큰은 나중에 수명이 긴 세션 토큰으로 교환 (업그레이드)할 수 없습니다.
웹 애플리케이션 (secure=0 또는 secure=1)을 등록할지 결정
AuthSub는 등록되지 않음, 등록됨, 보안 강화로 등록됨의 세 가지 모드로 사용할 수 있습니다. 이 문서의 나머지 부분에서는 마지막 옵션을 보안 AuthSub로 지칭합니다. 등록되지 않음/등록됨 모드는 보안 AuthSub보다 설정이 간단하지만 Google에서는 보안 강화를 위해 보안 토큰을 사용할 것을 권장합니다.
등록 방법
웹 기반 애플리케이션 등록을 선택하면 애플리케이션에 다음과 같은 이점이 있습니다.
- 더 높은 수준의 보안
- Google에서 신뢰함 (Google 승인 페이지에 사용자에게 경고가 표시되지 않음)
등록됨 + 보안 AuthSub
보안 AuthSub를 선택하는 경우 웹 애플리케이션을 등록하는 것 외에도 자체 서명 RSA 비공개 키와 공개 인증서 쌍을 만들어야 합니다. X.509 인증서 생성 예시는 등록 모드에서 사용할 키 및 인증서 생성 (아래)을 참고하세요.
데이터 액세스 범위 결정
각 Google 서비스는 토큰의 사용자 데이터 액세스를 결정 (및 축소)하는 scope 값을 정의합니다.
사용 가능한 scope 값 목록은 FAQ를 참고하세요.
Google Calendar API와 상호작용하기로 했으므로 scope는 http://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/*와 같은 Calendar의 모든 피드에 액세스할 수 있습니다.
범위가 여러 개인 토큰
여러 Google Data API에 액세스하는 토큰을 만들려면 각 범위를 URL 인코딩된 공백으로 구분하세요. 아래 예에서는 사용자의 Google 주소록 및 Google Calendar 데이터에 모두 액세스할 수 있는 토큰을 만듭니다.
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 시스템은 사용자를 제공된 'next' URL을 사용하여 애플리케이션으로 다시 리디렉션합니다.
일회용 토큰 추출
Google이 애플리케이션으로 다시 리디렉션하면 토큰이 쿼리 매개변수로 'next' URL에 추가됩니다. 위 예시의 경우 사용자가 로그인하면 Google에서 http://www.example.com/RetrieveToken?token=DQAADKEDE과 같은 URL로 리디렉션합니다.
애플리케이션은 URL 쿼리 매개변수에서 토큰 값을 추출해야 합니다.
애플리케이션이 사용자를 AuthSub 시스템으로 보내기 전에 사용자의 브라우저에 인증 쿠키를 설정한 경우 Google이 'next' 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 anAuthSubTokenorSecureAuthSubTokenobject. # 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 anAuthSubTokenorSecureAuthSubTokenobject. # 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의 경우 null을 전달하는 대신 RSA 비공개 키를 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의 경우 null을 전달하는 대신 RSA 비공개 키를 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 문서에 설명된 대로 Authorization 헤더에 토큰을 배치하여 세션 토큰을 사용하여 서버에 대한 요청을 인증할 수 있습니다.
세션 토큰을 설정한 후에는 토큰에 대해 생각하지 않고도 표준 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()
추가 리소스 및 샘플
- Google Data API 팁 블로그의 AuthSub 예
- Python 클라이언트 라이브러리 AuthSub 샘플
- Java 클라이언트 라이브러리 AuthSub 샘플
- 문서: .NET 클라이언트 라이브러리와 함께 AuthSub 사용
- 문서: JavaScript 클라이언트 라이브러리에서 'AuthSub' 인증 사용
보안 AuthSub와 함께 사용할 자체 서명 비공개 키 및 공개 인증서 생성
비공개 키는 서명을 생성하는 데 사용되며, 이 서명은 각 요청에 포함되어야 합니다. 인증서에 삽입된 공개 키는 Google에서 서명을 확인하는 데 사용됩니다. 공개 키는 PEM 형식의 X.509 인증서로 인코딩된 1024비트 RSA 키여야 합니다. 인증서는 등록 시점에 Google에 전송해야 합니다.
다음 섹션에서는 OpenSSL 유틸리티와 Java의 keytool 유틸리티라는 두 가지 특정 도구를 사용하여 키와 인증서를 생성하는 방법을 보여주는 예를 제공합니다.
이 예는 Google Data 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 Data API에 대한 요청을 디지털 서명할 수 있습니다.
Java 클라이언트용 키 생성
Java 클라이언트는 PKCS#8 형식의 비공개 키를 허용합니다. 위의 안내를 사용하여 키/인증서를 생성한 후 생성된 .pem 파일에서 .pk8 파일을 만듭니다.
openssl pkcs8 -in myrsakey.pem -topk8 -nocrypt -out myrsakey.pk8
또는 Java 키 저장소와 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