경고: 이 페이지는 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보다 설정이 더 쉬우나 강화된 보안에 보안 토큰을 사용하는 것이 좋습니다.
등록 방법
웹 기반 애플리케이션용 등록을 선택하면 애플리케이션에 다음과 같은 이점이 있습니다.
- 더 높은 수준의 보안.
- 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/*)에 대한 액세스가 허용됩니다.
다중 범위 토큰
여러 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 anAuthSubToken
orSecureAuthSubToken
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 anAuthSubToken
orSecureAuthSubToken
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()
추가 리소스 및 샘플
- Google Data API 도움말 블로그의 AuthSub 예
- Python 클라이언트 라이브러리 AuthSub 샘플
- 자바 클라이언트 라이브러리 AuthSub 샘플
- 도움말: .NET 클라이언트 라이브러리에서 AuthSub 사용
- 도움말: 자바스크립트 클라이언트 라이브러리에 'AuthSub' 인증 사용
보안 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