В этом руководстве описан набор функций, которые предоставляют дополнительные сигналы доверия к учетной записи Google. Эти сигналы доверия помогают вашей системе управления учетными записями принимать решения, основанные на оценке рисков, во время регистрации, создания учетной записи и в дальнейшем для повторных пользователей.
Настраивать
Для получения дополнительных заявок ваше приложение должно быть опубликовано, проверено , а функции пакета безопасности должны быть включены.
Чтобы подтвердить, что ваше приложение опубликовано и проверено:
- Открытая платформа аутентификации Google
- Выберите или создайте проект для своего приложения.
- В меню выберите пункт «Аудитория».
- Подтвердите, что статус публикации — « В производстве».
- В меню выберите «Центр проверки».
Подтвердите, что статус проверки : Подтверждено .
Для получения более подробной информации посетите Справочный центр по проверке приложений OAuth .
Чтобы включить поле auth_time :
- Открытая платформа аутентификации Google
- Выберите или создайте проект для своего приложения.
- Нажмите «Настройки» в меню.
- В разделе «Расширенные настройки» выберите «Заявки на возраст сессии» , чтобы включить
auth_time.
Поддерживаемые функции
В этом разделе описываются отдельные функции, входящие в состав пакета безопасности.
auth_time
Утверждение 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 request
Конкретный метод запроса параметра auth_time различается в зависимости от используемого API, однако каждый API включает необязательный параметр claims для запроса auth_time .
протокол OIDC
При использовании платформы OAuth напрямую запросите auth_time , добавив его в необязательный параметр запроса claims. Установите значение поля id_token объекта claims в формате JSON равным {"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 .
ГИС для веб-сайтов
Библиотека Sign in with Google для веб-приложений имеет два API: HTML и JavaScript для запроса дополнительных параметров. Например, запросите auth_time , используя 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",
});
google.accounts.id.renderButton(
document.getElementById("buttonDiv"),
{ type: "standard", size: "large" }
);
}
</script>
<div id="buttonDiv"></div>
</body>
</html>Дополнительную информацию см. в разделе «Вход через Google для веб-браузера» .
ГИС для Android
Для запроса auth_time используются метод setClaims и объект Claim .
Обновите зависимости сборки, чтобы использовать последние версии библиотек 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()
Дополнительную информацию см. в разделе «Аутентификация пользователей с помощью входа через Google» .
iOS
SDK Sign in with Google для iOS добавляет объект authTimeClaim и параметр claims в класс GIDSignIn , который используется для необязательного запроса auth_time .
Приложения, использующие ASWebAuthenticationSession обновляют общий для всего устройства файл cookie. GIDSignIn использует этот метод по умолчанию в iOS 12 и более поздних версиях, а также в macOS 12.16 и более поздних версиях. В этом сценарии пользователь, входящий в свою учетную запись Google, проходит аутентификацию, и сессия сохраняется в общем файле cookie. Здесь auth_time — это время последней аутентификации пользователя в Google на устройстве, а не только в вашем приложении.
SFSafariViewController , WKWebView и UIWebView работают в изолированных средах внутри вашего приложения, поэтому избегайте их использования при применении auth_time . В данном случае auth_time — это время последнего входа пользователя в приложение, а поскольку значение всегда является актуальным, оно менее информативно.
Чтобы запросить auth_time , обновите зависимости GoogleSignIn до последней версии и создайте объект authTimeClaim , добавив его в набор 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")") }
Objective-C
Добавьте набор утверждений в метод 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. }];
Дополнительную информацию см. в разделе «Интеграция входа через Google в ваше приложение для iOS или macOS» .
auth_time response
Когда в запрос включено утверждение auth_time , оно появляется в ответе ID Token вместе с другими стандартными утверждениями, такими как iss (эмитент), sub (субъект), aud (аудитория) и exp (время истечения срока действия). Значение утверждения auth_time представляет собой число в формате JSON, обозначающее количество секунд, прошедших с начала эпохи Unix (1 января 1970 г., 00:00:00 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" }
Идентификационный токен также содержит поле iat (issued at), указывающее время выдачи JWT. Сравнивая поля iat и auth_time , можно определить время, прошедшее с момента последней аутентификации пользователя относительно момента создания конкретного идентификационного токена. Например, если iat равно 1748881189, а auth_time равно 1748875426, разница составит 5763 секунды, что соответствует 1 часу, 36 минутам и 3 секундам прошедшего времени.