AuthSub در کتابخانه های سرویس گیرنده پروتکل داده گوگل

اخطار : این صفحه درباره APIهای قدیمی Google، Google Data APIها است. فقط مربوط به APIهایی است که در فهرست راهنمای Google Data APIs فهرست شده اند، که بسیاری از آنها با APIهای جدیدتر جایگزین شده اند. برای اطلاعات در مورد یک API جدید خاص، به مستندات API جدید مراجعه کنید. برای اطلاعات در مورد تأیید درخواست‌ها با یک API جدیدتر، به تأیید اعتبار و مجوز حساب‌های Google مراجعه کنید.

این سند نحوه استفاده از کتابخانه های سرویس گیرنده Google Data API برای اتصال به AuthSub Authentication برای برنامه های وب Google را شرح می دهد.

رابط AuthSub به یک برنامه مبتنی بر وب اجازه می دهد تا از طرف یک کاربر به سرویس Google دسترسی داشته باشد. برای حفظ سطح بالایی از امنیت، رابط AuthSub برنامه را قادر می‌سازد تا رمز احراز هویت را بدون رسیدگی به اطلاعات ورود به حساب کاربر دریافت کند.

کتابخانه های سرویس گیرنده Google Data API روش هایی را برای کمک به شما در استفاده از AuthSub در برنامه وب خود ارائه می دهند. به طور خاص، روش هایی برای ساخت URL درخواست، به دست آوردن یک نشانه احراز هویت یکبار مصرف، مبادله نشانه یکبار مصرف با یک نشانه جلسه و امضای درخواست وجود دارد.

توجه : کتابخانه سرویس گیرنده جاوا اسکریپت طعم خاص خود را از AuthSub به نام AuthSubJS دارد. برای کسب اطلاعات در مورد نحوه استفاده از AuthSubJS در برنامه های جاوا اسکریپت، به استفاده از احراز هویت "AuthSub" با کتابخانه سرویس گیرنده جاوا اسکریپت مراجعه کنید.

حضار

این سند برای برنامه نویسانی در نظر گرفته شده است که می خواهند برنامه های مبتنی بر وب آنها از طرف کاربران با استفاده از کتابخانه های سرویس گیرنده Google Data API به خدمات Google دسترسی داشته باشند.

این سند فرض می کند که شما با رابط AuthSub و فرآیند کلی برای ترکیب AuthSub در برنامه وب خود آشنا هستید. برای توضیح کامل پروتکل AuthSub، به احراز هویت AuthSub برای برنامه های کاربردی وب مراجعه کنید.

استفاده از AuthSub و Google Data API بدون کتابخانه های سرویس گیرنده

اگر می خواهید سرویس گیرنده برنامه وب شما با استفاده از AuthSub به عنوان یک سیستم احراز هویت با سرویس Google Data تعامل داشته باشد، پس همه چیزهایی که واقعاً باید بدانید در AuthSub Authentication for Web Applications موجود است. اگر نمی خواهید، نیازی به استفاده از کتابخانه های سرویس گیرنده Google Data APIs ندارید.

در اینجا خلاصه ای از نحوه احراز هویت یک کاربر با استفاده از AuthSub به برنامه شما آمده است:

برنامه شما URL مناسب AuthSub را می سازد و سپس کاربر را به آن URL می فرستد تا بتواند وارد شود. سیستم AuthSub کاربر را به URL موجود در سایت شما که مشخص کرده‌اید برمی‌گرداند و یک توکن یک بار مصرف را برمی‌گرداند. برنامه شما به صورت اختیاری آن توکن را با یک توکن جلسه مبادله می کند. سپس برنامه شما با هر درخواستی که برنامه به سرویس ارسال می کند، رمز را در هدر Authorization ارسال می کند.

کتابخانه های سرویس گیرنده Google Data API با مدیریت جزئیات مختلف برای شما، این فرآیند مجوز را ساده می کند. این سند توضیح می دهد که چگونه.

کار با AuthSub و Google Data API: نمونه های کتابخانه مشتری

این بخش نمونه ای از استفاده از روش های کتابخانه سرویس گیرنده Google Data APIs را برای دنبال کردن مراحل ذکر شده در بخش " کار با AuthSub " در اسناد AuthSub نشان می دهد.

در این مثال، ما در حال ادغام رابط AuthSub در یک برنامه وب هستیم که با Google Calendar تعامل دارد (اگرچه برای پیروی از این مثال، نیازی به دانستن چیزی در مورد Google Calendar ندارید). مثال فرض می کند که برنامه وب در example.com میزبانی می شود.

تصمیم بگیرید که از چه نوع رمزی استفاده کنید ( session=0 یا session=1 )

می توانید انتخاب کنید که از نشانه های یکبار مصرف ( session=0 ) یا session token ( session=1 ) استفاده کنید. این سند از نشانه‌های جلسه استفاده می‌کند، زیرا آنها در برنامه‌هایی که چندین درخواست API ایجاد می‌کنند مفیدتر هستند. همانطور که در مستندات AuthSub بحث شد، اگر تصمیم دارید از نشانه‌های جلسه در برنامه وب خود استفاده کنید، باید خودتان ذخیره‌سازی توکن را مدیریت کنید. این سند مدیریت توکن را پوشش نمی دهد. همچنین توجه داشته باشید که توکن‌های درخواست شده با session=0 را نمی‌توان بعداً به یک نشانه جلسه با عمر طولانی مبادله (ارتقا) کرد.

تصمیم بگیرید که آیا برنامه وب خود را ثبت کنید ( secure=0 یا secure=1 )

AuthSub را می توان در سه حالت مختلف، ثبت نشده ، ثبت شده و ثبت شده با امنیت پیشرفته استفاده کرد. باقیمانده این سند به آخرین گزینه به عنوان AuthSub امن اشاره خواهد کرد. اگرچه راه‌اندازی حالت ثبت‌نشده/ثبت‌شده ساده‌تر از AuthSub ایمن است، Google شما را تشویق می‌کند که از نشانه‌های امن برای امنیت پیشرفته‌شان استفاده کنید.

نحوه ثبت نام

انتخاب ثبت نام برای برنامه های کاربردی مبتنی بر وب به برنامه شما مزایای زیر را می دهد:

  1. سطح بالاتری از امنیت.
  2. مورد اعتماد بودن گوگل (هیچ اخطاری در صفحه مجوز گوگل به کاربر نمایش داده نمی شود).

ثبت شده + AuthSub ایمن

اگر تصمیم به AuthSub ایمن دارید، علاوه بر ثبت برنامه وب خود، باید یک جفت کلید خصوصی RSA و گواهی عمومی خودامضا ایجاد کنید. برای نمونه‌هایی از ایجاد گواهی‌های X.509 ، به ایجاد کلیدها و گواهی‌ها برای استفاده در حالت ثبت‌شده (در زیر) مراجعه کنید.

محدوده دسترسی به داده های خود را تعیین کنید

هر سرویس Google یک مقدار scope تعریف می کند که دسترسی یک نشانه به داده های کاربر را تعیین می کند (و احتمالاً محدود می کند). برای لیست مقادیر scope موجود به پرسش های متداول مراجعه کنید.

از آنجایی که تصمیم گرفتیم با 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/ امکان دسترسی به همه فیدهای Calendar را فراهم می کند: http://www.google.com/calendar/feeds/* .

توکن های چند دامنه ای

برای ایجاد نشانه هایی که به چندین API داده Google دسترسی دارند، هر محدوده را با یک فضای رمزگذاری شده با URL جدا کنید. مثال زیر یک نشانه ایجاد می‌کند که به اطلاعات Google Contacts و Google Calendar کاربر دسترسی خواهد داشت.

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

درخواست یک توکن احراز هویت یکبار مصرف

برای به دست آوردن یک نشانه AuthSub برای یک کاربر و یک سرویس معین، برنامه شما باید کاربر را به URL AuthSubRequest هدایت کند، که از آنها می خواهد به حساب Google خود وارد شوند. (برای اطلاعات بیشتر در مورد URL AuthSubRequest ، به احراز هویت کامل AuthSub برای برنامه های کاربردی وب مراجعه کنید.)

برای ایجاد URL AuthSubRequest در برنامه خود، از موارد زیر برای هر کتابخانه مشتری استفاده کنید:

جاوا

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);

.خالص

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;

پایتون

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 "بعدی"، برنامه شما می تواند از آن به روش های مختلفی برای ارسال کاربر به کنترل کننده 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>";

کاربر پیوند صفحه AuthSub را در Google دنبال می کند و وارد سیستم می شود. سپس سیستم AuthSub کاربر را با استفاده از URL "بعدی" که ارائه کرده اید به برنامه شما هدایت می کند.

رمز یکبار مصرف را استخراج کنید

هنگامی که Google به برنامه شما تغییر مسیر می دهد، رمز به عنوان پارامتر جستجو به URL "بعدی" اضافه می شود. در مورد مثال‌های بالا، پس از ورود کاربر، Google به URL مانند http://www.example.com/RetrieveToken?token=DQAADKEDE هدایت می‌شود. برنامه شما باید مقدار توکن را از پارامتر کوئری URL خود استخراج کند.

اگر برنامه شما قبل از ارسال کاربر به سیستم AuthSub یک کوکی احراز هویت را در مرورگر کاربر تنظیم کند، وقتی Google به URL "بعدی" هدایت می شود، برنامه شما می تواند کوکی احراز هویت را بخواند تا تشخیص دهد کدام کاربر به آن URL رسیده است. می توانید از چنین کوکی برای مرتبط کردن شناسه کاربری در برنامه خود با نشانه AuthSub بازیابی شده از Google استفاده کنید.

کتابخانه های سرویس گیرنده روش های آسانی را برای استخراج رمز یکبار مصرف ارائه می کنند:

جاوا

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

.خالص

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

PHP

$singleUseToken = $_GET['token'];

پایتون

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 ایمن استفاده می کنید، حتما کلید خصوصی RSA خود را تنظیم کنید تا یک SecureAuthSubToken ایجاد شود:

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 بازیابی می کنید همیشه یک توکن یکبار مصرف است. مرحله بعدی ارتقای آن نشانه برای یک توکن جلسه طولانی مدت با استفاده از URL AuthSubSessionToken است، همانطور که در مستندات کامل AuthSub Authentication برای برنامه های کاربردی وب توضیح داده شده است. اگر از 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

.خالص

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 راه اندازی کنید و کلید خصوصی RSA خود را با استفاده از setAuthSubPrivateKeyFile() تنظیم کنید:

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

پایتون

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 توضیح داده شده است، می توانید از نشانه جلسه برای احراز هویت درخواست ها به سرور استفاده کنید.

پس از تنظیم رمز جلسه خود، می‌توانید از تماس‌های کتابخانه سرویس گیرنده APIهای استاندارد Google Data برای تعامل با سرویس استفاده کنید، بدون اینکه نیازی به فکر کردن به رمز داشته باشید. برای جزئیات، به مستندات کتابخانه سرویس گیرنده و راهنمای توسعه‌دهنده Google Data APIs برای سرویس و زبانی که با آن در حال تعامل هستید، مراجعه کنید.

بازیابی اطلاعات مربوط به نشانه جلسه

اگر می‌خواهید آزمایش کنید که کلاینت و سرور شما بر روی پارامترهای توکن توافق دارند، می‌توانید توکن را به کنترل‌کننده AuthSubTokenInfo ارسال کنید، که مجموعه‌ای از جفت‌های نام-مقدار حاوی اطلاعات مربوط به توکن را برمی‌گرداند.

جاوا

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

اگر از AuthSub ایمن استفاده می‌کنید، کلید خصوصی RSA خود را ارسال کنید:

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

.خالص

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 ایمن استفاده می کنید، Zend_Gdata_HttpClient خود را ارسال کنید تا درخواست با کلید خصوصی RSA شما امضا شود:

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

پایتون

token_info = calendar_service.AuthSubTokenInfo()

یک نشانه جلسه را باطل کنید

نشانه‌های جلسه AuthSub منقضی نمی‌شوند. مشتری شما می تواند رمز جلسه را تا زمانی که نیاز داشته باشد ذخیره کند.

بنابراین، هنگامی که مشتری شما با استفاده از نشانه جلسه تمام شد، می تواند با استفاده از کنترل کننده AuthSubRevokeToken ، رمز را باطل کند، همانطور که در مستندات AuthSub توضیح داده شده است.

به عنوان مثال، اگر می‌خواهید توکن‌ها را به روشی سنتی مانند جلسه مدیریت کنید، مشتری شما می‌تواند در ابتدای جلسه کاربر یک توکن دریافت کند و در پایان جلسه کاربر آن را لغو کند.

برای باطل کردن یک نشانه از موارد زیر در هر کتابخانه مشتری استفاده کنید:

جاوا

AuthSubUtil.revokeToken(sessionToken, null);

اگر از AuthSub ایمن استفاده می‌کنید، کلید خصوصی RSA خود را ارسال کنید:

AuthSubUtil.revokeToken(sessionToken, privateKey);

.خالص

AuthSubUtil.revokeToken(sessionToken, null);

اگر از AuthSub ایمن استفاده می‌کنید، کلید خصوصی RSA خود را ارسال کنید:

AuthSubUtil.revokeToken(sessionToken, privateKey);

PHP

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

اگر از AuthSub ایمن استفاده می کنید، Zend_Gdata_HttpClient خود را ارسال کنید تا درخواست با کلید خصوصی RSA شما امضا شود:

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

پایتون

calendar_service.RevokeAuthSubToken()

منابع و نمونه های اضافی

بازگشت به بالا

ایجاد یک کلید خصوصی خودامضا و گواهی عمومی برای استفاده با AuthSub ایمن

کلید خصوصی برای تولید یک امضا استفاده می شود که باید در هر درخواست گنجانده شود. کلید عمومی تعبیه شده در گواهی توسط Google برای تأیید امضا استفاده می شود. کلید عمومی باید یک کلید RSA 1024 بیتی باشد که در گواهی X.509 در قالب PEM کدگذاری شده است. گواهی باید در زمان ثبت نام برای Google ارسال شود.

بخش‌های زیر نمونه‌هایی از نحوه تولید کلیدها و گواهی‌ها با استفاده از دو ابزار خاص را ارائه می‌دهند: ابزار OpenSSL و ابزار keytool Java.

این مثال‌ها مختص Google Data API نیستند. شما می توانید از همان ابزارهای کمکی برای تولید کلید برای هر منظوری استفاده کنید.

در مثال‌ها فرض می‌شود که شرکت شما My_Company نام دارد و با نام دامنه example.com در Mountain View، کالیفرنیا، ایالات متحده واقع شده است.

تولید کلید با استفاده از 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 هویت برنامه ای را که گواهی نشان می دهد مشخص می کند.

پارامتر -keyout فایلی را که حاوی کلیدها است مشخص می کند. این فایل حاوی اطلاعات حساس است و باید محافظت شود و با کسی به اشتراک گذاشته نشود.

پارامتر -out فایلی را مشخص می کند که حاوی گواهی در قالب PEM (که می تواند هنگام ثبت نام به Google ارسال شود) خواهد بود.

ایجاد کلید برای کلاینت دات نت

چارچوب دات نت کلیدها یا گواهی های ذخیره شده در قالب PEM را درک نمی کند. بنابراین، زمانی که فایل .pem را ایجاد کردید، یک مرحله اضافی لازم است:

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

این مرحله یک فایل PFX از کلید خصوصی و گواهی شما تولید می کند. این فایل را می توان به کتابخانه سرویس گیرنده دات نت وارد کرد تا درخواست های انجام شده به Google Data API را به صورت دیجیتالی امضا کند.

ایجاد کلید برای کلاینت جاوا

کلاینت جاوا کلیدهای خصوصی را در قالب PKCS#8 می پذیرد. پس از ایجاد یک کلید/گواهی با استفاده از دستورالعمل های بالا ، یک فایل pk8. از فایل pem. تولید شده خود ایجاد کنید:

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 هویت برنامه ای را که گواهی نشان می دهد مشخص می کند. پارامتر -storepass رمز عبور را برای محافظت از keystore مشخص می کند. پارامتر -keypass رمز عبور را برای محافظت از کلید خصوصی مشخص می کند.

برای نوشتن گواهینامه در فایلی که می تواند در ابزار ManageDomains استفاده شود، از دستور زیر استفاده کنید:

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

بازگشت به بالا