بسته امنیتی

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

راه‌اندازی

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

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

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

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

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

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

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

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

زمان_تایید

The auth_time claim is a standard part of the OpenID Connect protocol that provides information about when the End-User most recently authenticated with Google. It is a JSON number representing the number of seconds that have elapsed since the Unix epoch (January 1, 1970, 00:00:00 UTC) and is the time the user last authenticated. Think of it as a timestamp indicating the user's last login event to their Google Account from the current device or browser. This claim is included within the ID Token, which is a JSON Web Token (JWT) containing verified information about the authentication and the user.

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

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

آی‌او‌اس

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

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

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

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

سویفت

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

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

// 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];
NSSet *claims = [NSSet setWithObject:authTimeClaim];

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

When the auth_time claim is included in the request, it appears in the ID Token payload response alongside other standard claims like iss (issuer), sub (subject), aud (audience), and exp (expiration time). The value of the auth_time claim is a JSON number representing the number of seconds that have elapsed since the Unix epoch (January 1, 1970, 00:00:00 UTC) until the time user authentication last occurred. This is an example of a decoded ID Token that includes the auth_time claim:

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