ابرووا
شروع رایگان
☰ فهرست مستندات · Google

ورود با Google

کاربران را از طریق Abrova Auth با Google وارد کنید. اپ ورود بومی Google را با nonce هش‌شده اجرا می‌کند؛ ابرووا ID token مربوط به Google را برای OAuth client IDهای خودتان بررسی می‌کند.

به‌روزرسانی: ۵ آبان ۱۴۰۵
ورود با Google.

اپ شما ورودِ خودِ Google را اجرا می‌کند (Credential Manager در Android، Google Sign-In در iOS و Flutter، و Google Identity Services در وب) و یک ID token می‌گیرد. SDK این توکن را به Abrova Auth می‌فرستد؛ Abrova Auth بررسی می‌کند که Google آن را برای یکی از OAuth client IDهای شما صادر کرده باشد و کاربر را وارد می‌کند.

کاربران داخل ایران.

ورود با Google به اتصال به Google، و در Android به Google Play services هم، نیاز دارد. بعضی کاربران در ایران هیچ‌کدام را ندارند: گوشی‌هایی که بدون Google Play services فروخته شده‌اند، یا سرویس‌های Google که در دسترس نیستند. برای آن‌ها دکمه‌ی Google پیش از اینکه به Abrova Auth برسد شکست می‌خورد. ناشناس، ایمیل و رمز عبور، لینک یک‌بارمصرف و کد تلگرام بدون Google کار می‌کنند، پس دست‌کم یکی از آن‌ها را کنار دکمه‌ی Google بگذارید.

راه‌اندازی در کنسول#

  1. در Google Cloud Console › APIs & Services › Credentials، OAuth client IDهایی را که اپ‌هایتان با آن‌ها وارد می‌شوند پیدا کنید (یا بسازید). Android، iOS و وب هر کدام client ID خودشان را دارند.
  2. در کنسول ابرووا، Abrova Auth › روش‌های ورود را باز کنید، Google را روشن کنید و همه‌ی client IDهایی را که اپ‌هایتان استفاده می‌کنند اضافه کنید.

Abrova Auth فقط ID tokenی از Google را می‌پذیرد که audience آن یکی از این client IDها باشد.

کدام client ID در توکن قرار می‌گیرد.

در Android با Credential Manager، و در google_sign_in وقتی serverClientId را می‌دهید، ID token برای client ID وب شما صادر می‌شود. client ID وب را به فهرست اضافه کنید، حتی اگر اپ وب ندارید.

مقدار nonce#

با تابع کمکی SDK یک nonce خام تصادفی بسازید، SHA-256 آن را به‌صورت hex با حروف کوچک به Google بدهید و مقدار خام را به Abrova Auth. ابرووا بررسی می‌کند که این دو با هم جور باشند و هر nonce را فقط یک بار می‌پذیرد. ID token باید کمتر از ۱۰ دقیقه عمر داشته باشد.

SDKnonce خاممقدار برای Google
FlutterAbrovaAuthNonce.generate()AbrovaAuthNonce.sha256Hex(raw)
iOSAbrovaNonce.generate()AbrovaNonce.sha256(raw)
AndroidAbrovaNonce.generate()AbrovaNonce.sha256(raw)
Web، React Native(await auth.createNonce()).rawNonce(await auth.createNonce()).hashedNonce
nonce الزامی است.

Abrova Auth ورود با Google بدون nonce خام را رد می‌کند (INVALID_INPUT)، به همین دلیل همه‌ی SDKها آن را الزامی کرده‌اند.

ورود#

Android (Credential Manager)

androidx.credentials:credentials، androidx.credentials:credentials-play-services-auth و com.google.android.libraries.identity.googleid:googleid را به اپ اضافه کنید:

kotlin
val rawNonce = AbrovaNonce.generate()
val option = GetGoogleIdOption.Builder()
    .setServerClientId(WEB_CLIENT_ID)
    .setFilterByAuthorizedAccounts(false)
    .setNonce(AbrovaNonce.sha256(rawNonce))
    .build()
val response = CredentialManager.create(context)
    .getCredential(context, GetCredentialRequest.Builder().addCredentialOption(option).build())
val idToken = GoogleIdTokenCredential.createFrom(response.credential.data).idToken

AbrovaAuth.shared.signInWithGoogle(idToken, rawNonce)

Flutter

با google_sign_in نسخه‌ی ۷:

dart
final raw = AbrovaAuthNonce.generate();
await GoogleSignIn.instance.initialize(
  serverClientId: 'xxx.apps.googleusercontent.com',
  nonce: AbrovaAuthNonce.sha256Hex(raw),
);
final account = await GoogleSignIn.instance.authenticate();

await AbrovaAuth.instance.signInWithGoogle(
  idToken: account.authentication.idToken!,
  rawNonce: raw,
);

iOS

ID token مربوط به Google را با AbrovaNonce.sha256(rawNonce) به‌عنوان nonce درخواست کنید، سپس:

swift
try await AbrovaAuth.shared.signInWithGoogle(idToken: idToken, rawNonce: rawNonce)

Web و React Native

hashedNonce را به‌عنوان nonce به Google Identity Services (وب) یا کتابخانه‌ی ورود با Google در React Native بدهید:

typescript
const { rawNonce, hashedNonce } = await auth.createNonce();
// ... run Google's sign-in with nonce: hashedNonce, then:
await auth.signInWithGoogle({ idToken, rawNonce });

ایمیل#

Abrova Auth از ایمیل Google فقط وقتی استفاده می‌کند که Google بگوید تأییدشده است، و آن را (رمزگذاری‌شده) فقط وقتی ذخیره می‌کند که ذخیره‌ی اطلاعات پروفایل در Abrova Auth › تنظیمات روشن باشد. یک حساب Google و یک حساب Apple یا رمز عبور با همان ایمیل، کاربران جداگانه می‌مانند مگر اینکه کاربر آن‌ها را به هم وصل کند.

برای ارتقای کاربر ناشناس، linkGoogle(...) را با همان آرگومان‌ها صدا بزنید. شناسه‌ی کاربر همان می‌ماند. اگر این حساب Google از قبل متعلق به کاربر دیگری باشد، فراخوانی با PROVIDER_ALREADY_LINKED شکست می‌خورد.

خطاها#

کدمعنا
NOT_CONFIGUREDGoogle روشن است، اما هیچ client ID وارد نشده است.
INVALID_ID_TOKENGoogle آن را امضا نکرده، برای client IDی صادر شده که در فهرست شما نیست، بیش از ۱۰ دقیقه عمر دارد، یا nonce آن SHA-256 همان nonce خامی که فرستادید نیست.
INVALID_INPUTnonce خام فرستاده نشده یا بین ۱۶ تا ۲۵۶ کاراکتر نیست.
NONCE_REUSEDاین nonce قبلاً استفاده شده است. برای هر ورود یک nonce جدید بسازید.
PROVIDER_ALREADY_LINKEDفقط هنگام وصل کردن: این حساب Google متعلق به کاربر دیگری است.
METHOD_DISABLEDورود با Google برای پروژه خاموش است.
این صفحه مفید بود؟
گزارش مشکل