بسته امنیتی

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

راه‌اندازی

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

برای تأیید انتشار و تأیید برنامه خود:

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

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

برای فعال کردن ادعای auth_time :

  1. پلتفرم احراز هویت گوگل را باز کنید
  2. پروژه را برای برنامه خود انتخاب یا ایجاد کنید
  3. روی تنظیمات در منو کلیک کنید
  4. در قسمت تنظیمات پیشرفته، برای فعال کردن auth_time گزینه Session age claims را انتخاب کنید.

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

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

زمان_تایید

ادعای 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

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

پروتکل OIDC

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

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}}}

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

GIS برای وب

کتابخانه‌ی ورود با گوگل برای وب، دو API دارد: HTML و جاوا اسکریپت برای درخواست ادعاهای اضافی. برای مثال، درخواست auth_time با استفاده از 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",
      });
      google.accounts.id.renderButton(
        document.getElementById("buttonDiv"),
        { type: "standard", size: "large" }
      );
    }
  </script>
  <div id="buttonDiv"></div>
</body>
</html>

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

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

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

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

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

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

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

پاسخ auth_time

وقتی ادعای auth_time در درخواست گنجانده می‌شود، در پاسخ بار داده ID Token در کنار سایر ادعاهای استاندارد مانند iss (صادرکننده)، sub (موضوع)، aud (مخاطب) و exp (زمان انقضا) ظاهر می‌شود. مقدار ادعای auth_time یک عدد JSON است که نشان دهنده تعداد ثانیه‌هایی است که از عصر یونیکس (۱ ژانویه ۱۹۷۰، ساعت ۰۰:۰۰:۰۰ UTC) تا آخرین باری که احراز هویت کاربر انجام شده است، سپری شده است. این نمونه‌ای از یک ID Token رمزگشایی شده است که شامل ادعای auth_time است:

{
  "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,
  "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 برابر با ۱۷۴۸۸۷۵۴۲۶ باشد، اختلاف ۵۷۶۳ ثانیه است که نشان دهنده ۱ ساعت و ۳۶ دقیقه و ۳ ثانیه زمان سپری شده است.