Пакет безопасности

В этом руководстве описан набор функций, которые предоставляют дополнительные сигналы доверия к учетной записи Google. Эти сигналы доверия помогают вашей системе управления учетными записями принимать решения, основанные на оценке рисков, во время регистрации, создания учетной записи и в дальнейшем для повторных пользователей.

Сессии

Запрос на аутентификацию от приложения возвращает токен идентификации (ID Token). Например, при нажатии кнопки «Войти через Google» токен идентификации возвращается клиентскому или серверному приложению для Android, iOS или веб-приложению, отображающему эту кнопку.

Аутентификация для входа в учетную запись Google — это отдельное и самостоятельное событие. Данные, возвращаемые в ID-токене, представляют это событие. Например, время аутентификации и методы, использованные для входа в учетную запись Google.

Существует два момента аутентификации и две пользовательские сессии:

  • Сессия "Пользователь" <-> "Google" устанавливается, когда пользователь входит в свою учетную запись Google. Google управляет жизненным циклом и безопасностью этой сессии. Утверждения auth_time и amr предоставляют информацию об этой сессии.
  • Пользователь <-> Сессия вашего приложения. Эта сессия устанавливается после входа пользователя в ваше приложение, часто инициируемого с помощью входа через Google. Ваше приложение управляет этой сессией, используя данные учетных записей для улучшения процессов управления сессиями и аккаунтами.

Пользователи часто взаимодействуют с сервисами Google на нескольких устройствах, таких как телефоны, настольные компьютеры, смарт-дисплеи или телевизоры. Вход в систему на каждой платформе или устройстве создает отдельную сессию. При входе через веб-браузер сессия устанавливается между конкретным браузером и Google; обратите внимание, что режимы «Приватный просмотр» и «Инкогнито» создают свои собственные отдельные, изолированные сессии. Из-за этого одна учетная запись Google может иметь несколько отдельных активных сессий одновременно в разных браузерах и устройствах. Для получения дополнительной информации см. раздел «Устройства с доступом к учетной записи» .

Статус аккаунта Google

Типичные этапы жизненного цикла учетной записи Google:

Функции пакета безопасности, описанные в данном руководстве, применяются к активным или отключенным учетным записям, но не к событиям создания или удаления учетной записи Google.

Google может заблокировать учетную запись в любое время; некоторые из причин указаны в разделе «Ваша учетная запись заблокирована» . В этом случае все активные сеансы Google завершаются, и служба защиты от межсетевых атак Google отправляет событие RISC. Заблокированным учетным записям запрещается использовать функцию «Вход через Google», что означает, что токен идентификации никогда не выдается и, следовательно, не может использоваться для отслеживания заблокированных учетных записей пользователей.

Хотя получение событий защиты от межсетевых атак (RISC) является необязательным, эти события служат важными сигналами для управления сессией между пользователем и вашим приложением, а также для определения того, происходит ли она вообще. Инструкции по внедрению RISC и реагированию на события описаны в разделе «Защита учетных записей пользователей с помощью защиты от межсетевых атак» .

Настраивать

Для получения дополнительных запросов ваше приложение должно быть опубликовано, проверено , а функции пакета безопасности должны быть включены. Начните с подтверждения того, что ваше приложение опубликовано и проверено:

  1. Открытая платформа аутентификации Google
  2. Выберите или создайте проект для своего приложения.
  3. Нажмите «Аудитория» и подтвердите, что статус публикации — « В производстве».
  4. Нажмите «Центр проверки» и подтвердите, что статус проверки«Проверено».

Далее, включите дополнительные утверждения:

  1. Нажмите «Настройки» в меню.
  2. В разделе «Дополнительные настройки» выберите:
    • Заявления о возрасте сессии позволяют включить auth_time
    • Заявления о надежности аутентификации позволяют использовать amr

Для получения более подробной информации посетите Справочный центр по проверке приложений OAuth .

Поддерживаемые функции

В этом разделе описываются отдельные функции, входящие в состав пакета безопасности.

Ссылки на методы аутентификации

Authentication Methods References ( amr ) — это утверждение OpenID Connect, описывающее методы, использованные во время последнего события аутентификации между пользователем и Google.

Из возможных значений IANA.AMR Google поддерживает следующие значения, указывающие на то, что:

  • hwk использовался аппаратный ключ безопасности
  • Многофакторная аутентификация mfa завершена.
  • Был использован пароль pwd a.
  • swk программы использовался программный ключ, например, пароль.
  • sms -сообщение использовалось для подтверждения.
  • Для подтверждения использовался телефонный звонок tel

Одно или несколько из этих значений возвращаются в виде JSON-массива строк в утверждении amr токена ID.

Утверждение amr включается в токен ID только в том случае, если доступна информация об используемом методе аутентификации; оно может отсутствовать даже по запросу.

Владельцы учетных записей Google могут выбрать, требовать ли двухфакторную аутентификацию (2SV) и какие методы многофакторной аутентификации (MFA) использовать. При включенной расширенной защите для учетной записи Google требуется надежный метод 2SV, такой как ключи безопасности Titan ( hwk ) или Passkey ( swk ). В обоих случаях значение mfa присутствует, если при входе в учетную запись Google используется более одного фактора.

Наличие mfa аутентификации подтверждает, что событие аутентификации соответствует требованиям Google к многофакторной аутентификации. Например, аутентификация учетной записи Google с использованием пароля ( pwd ) и ключа доступа ( swk ) приводит к следующему утверждению "amr": ["mfa", "pwd", "swk"] .

В этих ресурсах содержится дополнительная информация о безопасности учетных записей и аутентификации пользователей: Получите самую надежную защиту учетной записи Google с помощью программы расширенной защиты (Advanced Protection Program) , Входите в систему с помощью ключа доступа (passkey) вместо пароля (password) и Используйте ключ безопасности для двухфакторной аутентификации (2-Stefan Verification) .

Администраторы рабочих пространств контролируют политику аутентификации для управляемых учетных записей рабочих пространств и могут потребовать многофакторную аутентификацию или использование ключей безопасности. См. Обзор управления идентификацией Google и Требования к многофакторной аутентификации для защиты и контроля входа в Google Cloud для получения дополнительной информации.

Время аутентификации

Утверждение auth_time является стандартной частью протокола OpenID Connect и предоставляет информацию о том, когда конечный пользователь в последний раз проходил аутентификацию в Google. Это число в формате JSON, представляющее количество секунд, прошедших с момента начала эпохи Unix (1 января 1970 г., 00:00:00 UTC), и это время последней аутентификации пользователя. Рассматривайте это как метку времени, указывающую на последнее событие входа пользователя в свою учетную запись Google с текущего устройства или браузера. Это утверждение включено в токен ID, который представляет собой JSON Web Token (JWT), содержащий проверенную информацию об аутентификации и пользователе.

Поле auth_time имеет важное значение для вашего приложения, поскольку позволяет определить, как давно пользователь активно входил в учетную запись Google на используемом им устройстве или в браузере. Это может быть особенно важно в целях безопасности, например:

  • Примите взвешенное решение о том, следует ли вашему приложению запрашивать дополнительную аутентификацию перед выполнением важных действий пользователя, таких как удаление учетной записи, изменение контактных данных или совершение платежа. Google не поддерживает запросы на повторную аутентификацию учетной записи Google.

  • Использование актуальности и стабильности сессии учетной записи Google пользователя в качестве сигнала доверия. Как правило, недавнее значение auth_time указывает на актуальность, а более старое — на стабильность.

В веб-приложениях сочетание браузера и операционной системы пользователя образует сессию после входа пользователя в свою учетную запись Google. Независимо от этого, ваш веб-сайт также поддерживает отдельную пользовательскую сессию. Более новое значение auth_time указывает на то, что пользователь недавно вошел в свою учетную запись Google. Часто это свидетельствует об активности пользователя и может быть интерпретировано как сигнал о более низком риске.

На мобильных платформах, таких как Android, пользователи обычно входят в систему напрямую, используя биометрические методы, такие как сканирование отпечатков пальцев или лица, а также разблокировку с помощью PIN-кода или графического ключа, специфичных для устройства. Мобильные приложения и платформы часто используют эти методы аутентификации на основе платформы, а не создают новую сессию с Google, что приводит к нечастым входам в учетную запись Google и соответствующим обновлениям параметра auth_time . Таким образом, недавнее значение auth_time может сигнализировать об изменении в длительной сессии учетной записи Google и, следовательно, о повышенном риске.

Сигналы доверия — это сложный вопрос. Ожидается, что auth_time будет использоваться вместе с другими сигналами, такими как включена ли многофакторная аутентификация (MFA), используемый метод аутентификации и продолжительность пользовательской сессии между вашим приложением и вашей платформой.

Запросы

Конкретный метод запроса параметров auth_time и amr различается в зависимости от используемого API, однако каждый API включает необязательный параметр claims для запроса auth_time и amr .

протокол OIDC

При использовании платформы OAuth напрямую запросите auth_time , добавив его в необязательный параметр запроса claims . Установите значение поля id_token объекта claims в формате JSON равным {"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 .

ГИС для веб-сайтов

Библиотека Sign in with Google для веб-приложений имеет два API: HTML и JavaScript для запроса дополнительных параметров. Например, запросите auth_time и amr , используя API JavaScript:

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

Дополнительную информацию см. в разделе «Вход через Google для веб-браузера» .

ГИС для Android

Для запроса auth_time и amr используются метод setClaims и объект Claim .

Обновите зависимости сборки, чтобы использовать последние версии библиотек androidx.credentials:credentials-play-services-auth и com.google.android.libraries.identity.googleid:googleid .

Создайте объекты Claim типов auth_time и amr , используя setClaims для добавления их в список вариантов входа в систему:

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

Дополнительную информацию см. в разделе «Аутентификация пользователей с помощью входа через Google» .

iOS

SDK Sign in with Google для iOS добавляет объект authTimeClaim и параметр claims в класс GIDSignIn , который используется для опционального запроса auth_time и amr .

Приложения, использующие ASWebAuthenticationSession обновляют общий для всего устройства файл cookie. GIDSignIn использует этот метод по умолчанию в iOS 12 и более поздних версиях, а также в macOS 10.15 и более поздних версиях. В этом сценарии пользователь, входящий в свою учетную запись Google, проходит аутентификацию, и сессия сохраняется в общем файле cookie. Здесь auth_time — это последняя аутентификация пользователя в Google на устройстве, а не только в вашем приложении.

SFSafariViewController , WKWebView и UIWebView работают в изолированных средах внутри вашего приложения, поэтому избегайте их использования при применении auth_time . В данном случае auth_time — это время последнего входа пользователя в приложение, а поскольку значение всегда является актуальным, оно менее информативно.

Чтобы запросить auth_time , обновите зависимости GoogleSignIn до последней версии и создайте объект authTimeClaim , добавив его в набор claims .

Для запроса amr создайте объект amrClaim и добавьте его в набор 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")") }

Objective-C

Добавьте набор утверждений в метод 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. }];

Дополнительную информацию см. в разделе «Интеграция входа через Google в ваше приложение для iOS или macOS» .

Ответы

Если в запрос включены утверждения auth_time или amr , они возвращаются в ответе ID Token вместе с другими стандартными утверждениями, такими как iss (эмитент), sub (субъект), aud (аудитория) и exp (время истечения срока действия).

Вероятно, отсутствие подтверждений связано с тем, что приложение не проверено или отключены дополнительные настройки (по умолчанию). Следуйте инструкциям в разделе «Настройка» , чтобы убедиться, что идентификатор клиента и используемое приложение проверены, а дополнительные подтверждения включены.

Значение параметра auth_time представляет собой число в формате JSON, указывающее количество секунд, прошедших с момента начала эпохи Unix (1 января 1970 г., 00:00:00 UTC) до момента последней аутентификации пользователя.

Значение параметра amr представляет собой массив строк в формате JSON, отображающий методы аутентификации, использованные во время последнего входа в учетную запись Google.

Это пример декодированного ID-токена, включающего поля 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"
}

Идентификационный токен также содержит поле iat (issued at), указывающее время выдачи JWT. Сравнивая поля iat и auth_time , можно определить время, прошедшее с момента последней аутентификации пользователя относительно момента создания конкретного идентификационного токена. Например, если iat равно 1748881189, а auth_time равно 1748875426, разница составит 5763 секунды, что соответствует 1 часу, 36 минутам и 3 секундам прошедшего времени.