بسته امنیتی

این راهنما مجموعه‌ای از ویژگی‌هایی را شرح می‌دهد که سیگنال‌های اعتماد بیشتری را در مورد یک حساب گوگل برمی‌گردانند. این سیگنال‌های اعتماد به سیستم مدیریت حساب شما کمک می‌کنند تا در طول ثبت‌نام، ایجاد حساب و بعداً برای کاربران برگشتی، تصمیمات مبتنی بر ریسک بگیرد.

جلسات

درخواست احراز هویت توسط یک برنامه، یک شناسه توکن (ID Token) را برمی‌گرداند. برای مثال، وقتی دکمه ورود با گوگل فشرده می‌شود، یک شناسه توکن به برنامه اندروید، iOS یا کلاینت یا سرور وب که دکمه را نمایش می‌دهد، بازگردانده می‌شود.

احراز هویت برای ورود به حساب گوگل یک رویداد مجزا و مستقل است. درخواست‌های برگردانده شده در شناسه توکن (ID Token) نشان‌دهنده این رویداد هستند. به عنوان مثال، زمان احراز هویت و روش‌هایی که برای ورود به حساب گوگل استفاده شده‌اند.

دو لحظه احراز هویت و دو جلسه کاربری وجود دارد:

  • کاربر <-> جلسه گوگل زمانی ایجاد می‌شود که کاربر وارد حساب گوگل خود شود. گوگل چرخه حیات و امنیت این جلسه را مدیریت می‌کند. ادعاهای auth_time و amr به شما بینشی در مورد این جلسه ارائه می‌دهند.
  • کاربر <-> جلسه برنامه شما پس از ورود کاربر به برنامه شما، که اغلب با استفاده از ورود با گوگل آغاز می‌شود، ایجاد می‌شود. برنامه شما این جلسه را با استفاده از ادعاها برای بهبود تصمیمات مدیریت جلسه و حساب مدیریت می‌کند.

کاربران اغلب با سرویس‌های گوگل از طریق دستگاه‌های مختلف مانند تلفن‌ها، رایانه‌های رومیزی، نمایشگرهای هوشمند یا تلویزیون‌ها تعامل دارند. ورود به سیستم در هر پلتفرم یا دستگاه، یک جلسه مجزا ایجاد می‌کند. برای ورود به سیستم وب، یک جلسه بین مرورگر خاص و گوگل ایجاد می‌شود. توجه داشته باشید که حالت‌های مرور خصوصی و ناشناس، جلسات جداگانه و ایزوله خود را ایجاد می‌کنند. به همین دلیل، یک حساب گوگل می‌تواند چندین جلسه مجزا داشته باشد که به طور همزمان در مرورگرها و دستگاه‌های مختلف فعال هستند. برای جزئیات بیشتر، به «مشاهده دستگاه‌های دارای دسترسی به حساب» مراجعه کنید.

وضعیت حساب گوگل

رویدادهای معمول چرخه عمر یک حساب گوگل عبارتند از:

ویژگی‌های بسته امنیتی که در این راهنما شرح داده شده‌اند، برای حساب‌های فعال یا غیرفعال اعمال می‌شوند، اما برای رویدادهای ایجاد یا حذف حساب گوگل اعمال نمی‌شوند.

گوگل ممکن است در هر زمانی، به دلایلی که در بخش «حساب شما غیرفعال است» آمده است، یک حساب را غیرفعال کند. در این صورت، هرگونه نشست فعال گوگل خاتمه می‌یابد و یک رویداد RISC توسط سرویس حفاظت از حساب‌های کاربری متقابل گوگل ارسال می‌شود. حساب‌های غیرفعال شده از استفاده از «ورود با گوگل» منع می‌شوند، به این معنی که هرگز توکن شناسایی صادر نمی‌شود و بنابراین نمی‌توان از آن برای نظارت بر حساب‌های کاربری غیرفعال استفاده کرد.

اگرچه دریافت رویدادهای محافظت از حساب‌های کاربری متقابل (RISC) اختیاری است، اما این رویدادها به عنوان سیگنال‌های مهمی برای مدیریت جلسه بین کاربر و برنامه شما و اینکه آیا ... عمل می‌کنند. دستورالعمل‌های مربوط به نحوه پیاده‌سازی RISC و پاسخ به رویدادها توسط Protect user accounts with Cross-Account Protection شرح داده شده است.

راه‌اندازی

برای دریافت ادعاهای بیشتر، برنامه شما باید منتشر، تأیید شده و ویژگی‌های بسته امنیتی آن فعال باشد. با تأیید انتشار و تأیید برنامه خود شروع کنید:

  1. پلتفرم احراز هویت گوگل را باز کنید
  2. پروژه را برای برنامه خود انتخاب یا ایجاد کنید
  3. روی مخاطب کلیک کنید و تأیید کنید که وضعیت انتشار در حال تولید است.
  4. روی مرکز تأیید کلیک کنید و تأیید کنید که وضعیت تأیید شده است.

در مرحله بعد، ادعاهای اضافی را فعال کنید:

  1. روی تنظیمات در منو کلیک کنید
  2. در تنظیمات پیشرفته، موارد زیر را انتخاب کنید:
    • سن جلسه ادعا می‌کند که auth_time فعال می‌کند
    • ادعای قدرت احراز هویت برای فعال کردن amr

برای کسب اطلاعات بیشتر، از مرکز راهنمایی تأیید برنامه OAuth دیدن کنید.

ویژگی‌های پشتیبانی‌شده

این بخش ویژگی‌های منحصر به فردی که بسته امنیتی را تشکیل می‌دهند، شرح می‌دهد.

روش‌های احراز هویت

«مراجع روش‌های احراز هویت» ( amr ) یک ادعای OpenID Connect است که روش‌های استفاده شده در آخرین رویداد احراز هویت بین کاربر و گوگل را شرح می‌دهد.

از مقادیر ممکن IANA.AMR، گوگل مقادیر زیر را پشتیبانی می‌کند که نشان می‌دهد:

  • hwk یک کلید امنیتی سخت‌افزاری استفاده شده است
  • احراز هویت چند عاملی mfa تکمیل شد
  • pwd a رمز عبور استفاده شده است
  • swk یک کلید نرم‌افزاری مانند رمز عبور استفاده شده است
  • یک پیامک برای تأیید استفاده شد sms
  • tel یک تماس تلفنی برای تأیید استفاده شد

یک یا چند مورد از این مقادیر به عنوان آرایه‌ای از رشته‌های JSON در داخل شناسه توکن amr بازگردانده می‌شوند.

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

صاحبان حساب گوگل می‌توانند 2SV و روش‌های MFA مورد استفاده را انتخاب کنند. هنگامی که Advanced Protection در یک حساب گوگل فعال است، یک روش 2SV قوی مانند کلیدهای امنیتی Titan ( hwk ) یا کلید عبور ( swk ) مورد نیاز است. در هر دو حالت، مقدار mfa زمانی وجود دارد که بیش از یک عامل هنگام ورود به حساب گوگل استفاده شود.

وجود mfa تأیید می‌کند که رویداد احراز هویت، الزامات گوگل برای احراز هویت چند عاملی را برآورده کرده است. برای مثال، احراز هویت حساب گوگل با رمز عبور ( pwd ) و کلید عبور ( swk ) منجر به این ادعا می‌شود "amr": ["mfa", "pwd", "swk"] .

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

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

زمان احراز هویت

ادعای auth_time بخش استانداردی از پروتکل OpenID Connect است که اطلاعاتی در مورد آخرین زمان احراز هویت کاربر نهایی با گوگل ارائه می‌دهد. این یک عدد JSON است که تعداد ثانیه‌های سپری شده از عصر یونیکس (۱ ژانویه ۱۹۷۰، ساعت ۰۰:۰۰:۰۰ UTC) را نشان می‌دهد و زمانی است که کاربر آخرین بار احراز هویت شده است. آن را به عنوان یک مهر زمانی در نظر بگیرید که آخرین رویداد ورود کاربر به حساب گوگل خود را از دستگاه یا مرورگر فعلی نشان می‌دهد. این ادعا در ID Token گنجانده شده است که یک JSON Web Token (JWT) است که حاوی اطلاعات تأیید شده در مورد احراز هویت و کاربر است.

ادعای auth_time برای برنامه شما ارزشمند است زیرا به شما امکان می‌دهد تعیین کنید که کاربر اخیراً چه زمانی به طور فعال وارد حساب گوگل خود در دستگاه یا مرورگری که استفاده می‌کند شده است. این امر می‌تواند به ویژه برای اهداف امنیتی مانند موارد زیر مهم باشد:

  • تصمیم‌گیری آگاهانه در مورد اینکه آیا برنامه شما باید قبل از انجام اقدامات حساس کاربر مانند حذف حساب، تغییر روش‌های تماس با حساب یا انجام پرداخت، یک چالش احراز هویت تکمیلی اضافی صادر کند یا خیر. گوگل از درخواست‌های احراز هویت مجدد حساب گوگل پشتیبانی نمی‌کند.

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

برای برنامه‌های وب، ترکیب مرورگر کاربر و سیستم عامل، پس از ورود کاربر به حساب گوگل خود، یک جلسه (session) را تشکیل می‌دهد. وب‌سایت شما نیز به طور مستقل، یک جلسه کاربری جداگانه را حفظ می‌کند. مقدار جدیدتر auth_time نشان می‌دهد که کاربر اخیراً وارد حساب گوگل خود شده است. اغلب این نشانه‌ای از یک کاربر فعال و درگیر است و می‌تواند به عنوان سیگنالی از ریسک کمتر تفسیر شود.

در پلتفرم‌های موبایل مانند اندروید، کاربران معمولاً مستقیماً با استفاده از روش‌های بیومتریک مانند اثر انگشت یا اسکن چهره و باز کردن قفل با پین یا الگوی خاص دستگاه، وارد دستگاه خود می‌شوند. برنامه‌ها و پلتفرم‌های موبایل اغلب از این روش‌های احراز هویت مبتنی بر پلتفرم به جای ایجاد یک جلسه جدید با گوگل استفاده می‌کنند که منجر به ورودهای نادر به حساب گوگل و به‌روزرسانی‌های مربوط به auth_time می‌شود. بنابراین در اینجا یک مقدار auth_time اخیر ممکن است نشان‌دهنده تغییر در یک جلسه طولانی مدت حساب گوگل و در نتیجه افزایش خطر باشد.

سیگنال‌های اعتماد موضوع ظریفی هستند. انتظار می‌رود auth_time همراه با سیگنال‌های دیگری مانند فعال بودن احراز هویت چند عاملی (MFA)، روش احراز هویت مورد استفاده و مدت زمان جلسه کاربر بین برنامه و پلتفرم شما استفاده شود.

درخواست‌ها

روش خاص مورد استفاده برای درخواست ادعاهای auth_time و amr بسته به API مورد استفاده متفاوت است، با این حال هر API شامل یک پارامتر claims اختیاری برای درخواست auth_time و amr است.

پروتکل OIDC

هنگام استفاده مستقیم از پلتفرم OAuth، با اضافه کردن auth_time به پارامتر درخواست اختیاری claims ، آن را درخواست کنید. مقدار فیلد id_token از شیء JSON claims را روی {"auth_time":{"essential":true}} تنظیم کنید. به طور مشابه، {"amr":{"essential":true}} را به claims اضافه کنید تا amr درخواست کنید:

https://accounts.google.com/o/oauth2/v2/auth?
response_type=id_token&
client_id=YOUR_CLIENT_ID&
scope=openid email profile&
redirect_uri=https://example.com/user-login&
nonce=123-456-7890&
claims={ "id_token": {
            "auth_time": { "essential":true },
            "amr": {"essential":true}
          }
        }

برای اطلاعات بیشتر به OpenID Connect مراجعه کنید.

GIS برای وب

کتابخانه‌ی ورود با گوگل برای وب، دو API دارد: HTML و جاوا اسکریپت برای درخواست ادعاهای اضافی. برای مثال، درخواست auth_time و amr با استفاده از API جاوا اسکریپت:

<html>
<body>
  <script src="https://accounts.google.com/gsi/client" async></script>
  <script>
    window.onload = function () {
      google.accounts.id.initialize({
        client_id: "YOUR_WEB_CLIENT_ID",
        callback: function(rsp) { console.log(rsp.credential); },
        essential_claims: "auth_time, amr",
      });
      google.accounts.id.renderButton(
        document.getElementById("buttonDiv"),
        { type: "standard", size: "large" }
      );
    }
  </script>
  <div id="buttonDiv"></div>
</body>
</html>

برای اطلاعات بیشتر به «ورود با گوگل برای وب» مراجعه کنید.

سیستم اطلاعات جغرافیایی برای اندروید

یک متد setClaims و شیء Claim برای درخواست auth_time و amr استفاده می‌شوند.

وابستگی‌های ساخت خود را به‌روزرسانی کنید تا از آخرین نسخه‌های کتابخانه‌های androidx.credentials:credentials-play-services-auth و com.google.android.libraries.identity.googleid:googleid استفاده کنند.

با استفاده از setClaims ، اشیاء Claim از نوع auth_time و amr را نمونه‌سازی کنید تا آنها را به لیست گزینه‌های ورود به سیستم اضافه کنید:

val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
    .setAutoSelectEnabled(true)
    .setFilterByAuthorizedAccounts(true)
    .setServerClientId(WEB_CLIENT_ID)
    .setNonce("NONCE")
    .setClaims(ImmutableList.of(
           new Claim("auth_time", true),
           new Claim("amr", true)
    ))
    .build()

برای اطلاعات بیشتر به بخش «احراز هویت کاربران با ورود با گوگل» مراجعه کنید.

آی‌او‌اس

کیت توسعه نرم‌افزاری ورود با گوگل برای iOS یک شیء authTimeClaim و پارامتر claims را به کلاس GIDSignIn اضافه می‌کند که برای درخواست اختیاری auth_time و amr استفاده می‌شود.

برنامه‌هایی که از ASWebAuthenticationSession استفاده می‌کنند، یک فایل کوکی مشترک در کل دستگاه را به‌روزرسانی می‌کنند. GIDSignIn به طور پیش‌فرض در iOS 12 یا بالاتر و macOS 10.15 یا بالاتر از این روش استفاده می‌کند. در این سناریو، کاربری که وارد حساب گوگل خود می‌شود، احراز هویت می‌شود و جلسه در فایل کوکی مشترک ذخیره می‌شود. در اینجا auth_time آخرین احراز هویت گوگل کاربر در دستگاه است، نه فقط در برنامه شما.

SFSafariViewController ، WKWebView و UIWebView در محیط‌های بسته‌ی جداگانه‌ای درون برنامه‌ی شما عمل می‌کنند، هنگام استفاده از auth_time از استفاده از آن‌ها خودداری کنید. در اینجا auth_time آخرین ورود کاربر به خود برنامه است، از آنجایی که مقدار آن همیشه جدید است، معنای کمتری دارد.

برای درخواست auth_time ، وابستگی‌های GoogleSignIn را به آخرین نسخه به‌روزرسانی کنید و یک شیء authTimeClaim ایجاد کنید و آن را به مجموعه claims اضافه کنید.

برای درخواست amr یک شیء amrClaim ایجاد کنید و آن را به مجموعه claims اضافه کنید.

سویفت

Claims تنظیم شده را به متد GIDSignIn.sharedInstance.signIn اضافه کنید:

let authTimeClaim = GIDClaim.authTime()
let amrClaim = GIDClaim.amr()
let claims = Set([authTimeClaim, amrClaim])

// Start the sign-in process GIDSignIn.sharedInstance.signIn( withPresenting: rootViewController, claims: claims ) { signInResult, error in guard let result = signInResult else { print("Error signing in: (error?.localizedDescription ?? "No error description")") return } // If sign in succeeded, display the app's main content View print("ID Token: (result.user.idToken?.tokenString ?? "No token")") }

هدف-سی

Claims تنظیم شده را به متد signInWithPresentingViewController اضافه کنید:

GIDClaim *authTimeClaim = [GIDClaim authTimeClaim];
GIDClaim *AMRClaim = [GIDClaim AMRClaim];
NSSet *claims = [NSSet setWithArray:@[authTimeClaim, AMRClaim]];

// Include the claims set and start the sign-in process [GIDSignIn.sharedInstance signInWithPresentingViewController:self hint:nil claims:claims completion:^(GIDSignInResult * _Nullable signInResult, NSError * _Nullable error) { // On success signInResult.user.idToken // contains the requested claims. }];

برای اطلاعات بیشتر به بخش «ادغام ورود با گوگل در برنامه iOS یا macOS» مراجعه کنید.

پاسخ‌ها

وقتی ادعاهای auth_time یا amr در درخواست گنجانده شوند، در پاسخ ID Token payload در کنار سایر ادعاهای استاندارد مانند iss (صادرکننده)، sub (موضوع)، aud (مخاطب) و exp (زمان انقضا) بازگردانده می‌شوند.

احتمالاً عدم وجود درخواست‌ها به دلیل عدم تأیید برنامه یا غیرفعال بودن تنظیمات اضافی است که به طور پیش‌فرض فعال است. برای تأیید تأیید شناسه مشتری و برنامه مورد استفاده و فعال بودن درخواست‌های اضافی، دستورالعمل‌های موجود در تنظیمات را دنبال کنید.

مقدار ادعای auth_time یک عدد JSON است که تعداد ثانیه‌های سپری شده از عصر یونیکس (۱ ژانویه ۱۹۷۰، ساعت ۰۰:۰۰:۰۰ UTC) تا آخرین باری که احراز هویت کاربر انجام شده است را نشان می‌دهد.

مقدار ادعای amr یک آرایه JSON از رشته‌ها است که روش‌های احراز هویت استفاده شده در آخرین رویداد ورود به حساب گوگل را نشان می‌دهد.

این نمونه‌ای از یک توکن شناسه رمزگشایی شده است که شامل ادعاهای auth_time و amr می‌شود:

{
  "iss": "https://accounts.google.com",
  "azp": "YOUR_CLIENT_ID",
  "aud": "YOUR_CLIENT_ID",
  "sub": "117726431651943698600",
  "email": "alice@example.com",
  "email_verified": true,
  "nonce": "123-456-7890",
  "auth_time": 1748875426,
  "amr": ["mfa", "pwd", "tel"],
  "nbf": 1748880889,
  "name": "Elisa Beckett",
  "picture": "https://lh3.googleusercontent.com/a/default-user=s96-c",
  "given_name": "Elisa",
  "family_name": "Beckett",
  "iat": 1748881189,
  "exp": 1748884789,
  "jti": "8b5d7ce345787d5dbf14ce6e08a8f88ee8c9b5b1"
}

شناسه توکن (ID Token) همچنین شامل یک ادعای iat (صادر شده در) است که زمان صدور JWT را نشان می‌دهد. با مقایسه ادعاهای iat و auth_time ، می‌توانید زمان سپری شده از آخرین احراز هویت کاربر را نسبت به زمان ایجاد شناسه توکن خاص تعیین کنید. به عنوان مثال، اگر iat برابر با ۱۷۴۸۸۸۱۱۸۹ و auth_time برابر با ۱۷۴۸۸۷۵۴۲۶ باشد، اختلاف ۵۷۶۳ ثانیه است که نشان دهنده ۱ ساعت و ۳۶ دقیقه و ۳ ثانیه زمان سپری شده است.