이 가이드에서는 Google 계정에 관한 추가 신뢰 신호를 반환하는 기능 모음을 설명합니다. 이러한 신뢰 신호는 계정 관리 시스템이 가입, 계정 생성, 재방문자를 위한 후속 단계 중에 위험에 기반한 결정을 내리는 데 도움이 됩니다.
세션
애플리케이션의 인증 요청은 ID 토큰을 반환합니다. 예를 들어 Google 계정으로 로그인 버튼을 누르면 버튼을 표시하는 Android, iOS 또는 웹 클라이언트나 서버 애플리케이션에 ID 토큰이 반환됩니다.
Google 계정에 로그인하기 위한 인증은 별도의 이벤트입니다. ID 토큰에 반환된 클레임은 이 이벤트를 나타냅니다. 예를 들어 Google 계정에 로그인하는 데 사용된 인증 시간과 방법이 있습니다.
인증 순간과 사용자 세션은 각각 두 개입니다.
- 사용자 <-> Google 세션 사용자가 Google 계정에 로그인할 때 설정됩니다. Google은 이 세션의 수명 주기와 보안을 관리합니다.
auth_time및amr클레임은 이 세션에 대한 통계를 제공합니다. - 사용자 <-> 애플리케이션 세션 사용자가 애플리케이션에 로그인한 후 설정되며, Google 계정으로 로그인으로 시작되는 경우가 많습니다. 애플리케이션은 클레임을 사용하여 세션 및 계정 관리 결정을 개선함으로써 이 세션을 관리합니다.
사용자는 휴대전화, 데스크톱 컴퓨터, 스마트 디스플레이, TV 등 여러 기기에서 Google 서비스와 상호작용하는 경우가 많습니다. 각 플랫폼 또는 기기에 로그인하면 별도의 세션이 설정됩니다. 웹 로그인의 경우 특정 브라우저와 Google 간에 세션이 설정됩니다. 비공개 탐색 모드와 시크릿 모드는 자체적으로 별도의 격리된 세션을 만듭니다. 따라서 하나의 Google 계정에서 다양한 브라우저와 기기에 걸쳐 동시에 활성화된 여러 개의 개별 세션을 가질 수 있습니다. 자세한 내용은 계정 액세스 권한이 있는 기기 확인하기를 참고하세요.
Google 계정 상태
Google 계정 수명 주기의 일반적인 이벤트는 다음과 같습니다.
- 사용자가 Google 계정을 만들기로 선택하는 경우
- Google에서 계정을 사용 중지할 수 있으며 사용자는 Google 계정 또는 Gmail을 복구하는 방법에 따라 계정을 다시 활성화할 수 있습니다.
- 사용자가 Google 계정을 삭제하거나 Google 휴면 계정 정책에 따라 Google에서 계정을 삭제할 수 있습니다.
이 가이드에 설명된 보안 번들 기능은 활성 또는 비활성 계정에 적용되지만 Google 계정 생성 또는 삭제 이벤트에는 적용되지 않습니다.
Google은 언제든지 계정을 사용 중지할 수 있으며, 그 이유는 계정이 사용 중지됨에서 확인할 수 있습니다. 이 경우 활성 Google 세션이 종료되고 Google의 계정 간 보안 서비스에서 RISC 이벤트가 전송됩니다. 사용 중지된 계정은 Google 계정으로 로그인을 사용할 수 없으므로 ID 토큰이 발급되지 않으며 따라서 사용 중지된 사용자 계정을 모니터링하는 데 사용할 수 없습니다.
교차 계정 보호 (RISC) 이벤트를 수신하는 것은 선택사항이지만 이러한 이벤트는 사용자와 앱 간의 세션을 관리하고 세션이 활성 상태인지 여부를 관리하는 데 중요한 신호 역할을 합니다. RISC를 구현하고 이벤트에 응답하는 방법에 관한 안내는 교차 계정 보호로 사용자 계정 보호에 설명되어 있습니다.
설정
추가 클레임을 수신하려면 앱이 게시되고 인증되었으며 보안 번들 기능이 사용 설정되어 있어야 합니다. 먼저 앱이 게시되고 인증되었는지 확인합니다.
- Google 인증 플랫폼 열기
- 앱의 프로젝트 선택 또는 만들기
- 잠재고객을 클릭하고 게시 상태가 프로덕션인지 확인합니다.
- 인증 센터를 클릭하고 인증 상태가 인증됨인지 확인합니다.
그런 다음 추가 클레임을 사용 설정합니다.
- 메뉴에서 설정을 클릭합니다.
- 고급 설정에서 다음을 선택합니다.
auth_time를 사용 설정하기 위한 세션 기간 클레임- 인증 강도 클레임을 사용하여
amr사용 설정
자세히 알아보려면 OAuth 앱 인증 고객센터를 참고하세요.
지원되는 기능
이 섹션에서는 보안 번들을 구성하는 개별 기능에 대해 설명합니다.
인증 방법 참조
인증 방법 참조 (amr)는 사용자와 Google 간의 마지막 인증 이벤트 중에 사용된 방법을 설명하는 OpenID Connect 클레임입니다.
Google은 가능한 IANA.AMR 값 중에서 다음 값을 지원하여 다음을 나타냅니다.
hwk하드웨어 보안 키가 사용됨mfa다중 인증이 완료됨pwd비밀번호가 사용됨swk패스키와 같은 소프트웨어 키가 사용됨sms인증에 SMS 메시지가 사용됨tel인증에 전화 통화가 사용됨
이러한 값 중 하나 이상이 ID 토큰 amr 클레임 내에서 문자열의 JSON 배열로 반환됩니다.
amr 클레임은 사용된 인증 방법에 관한 정보를 사용할 수 있는 경우에만 ID 토큰에 포함되며, 요청된 경우에도 없을 수 있습니다.
Google 계정 소유자는 2단계 인증을 요구할지 여부와 사용할 MFA 방법을 선택할 수 있습니다.
Google 계정에서 고급 보호를 사용 설정하면 Titan 보안 키 (hwk) 또는 패스키 (swk)와 같은 강력한 2단계 인증 방법이 필요합니다. 두 경우 모두 Google 계정에 로그인할 때 두 개 이상의 요소가 사용되면 mfa 값이 표시됩니다.
mfa가 있으면 인증 이벤트가 Google의 다중 인증 요구사항을 충족했음을 확인할 수 있습니다. 예를 들어 비밀번호 (pwd)와 패스키 (swk)를 사용한 Google 계정 인증은 이 클레임 "amr": ["mfa", "pwd", "swk"]을 생성합니다.
계정 보안 및 사용자 인증에 관한 자세한 내용은 고급 보호 프로그램을 통해 Google의 가장 강력한 계정 보안 기능 이용하기, 비밀번호 대신 패스키로 로그인하기, 2단계 인증에 보안 키 사용하기를 참고하세요.
Workspace 관리자는 관리 Workspace 계정의 인증 정책을 제어하며 MFA 또는 보안 키 사용을 요구할 수 있습니다. 자세한 내용은 Google ID 관리 개요 및 Google Cloud의 다단계 인증 요구사항 로그인 보호 및 제어를 참고하세요.
인증 시간
auth_time 클레임은 최종 사용자가 Google로 가장 최근에 인증한 시점에 관한 정보를 제공하는 OpenID Connect 프로토콜의 표준 부분입니다. 유닉스 시간 (1970년 1월 1일 00:00:00 UTC) 이후 경과된 시간을 초로 나타내는 JSON 숫자이며, 사용자가 마지막으로 인증한 시간입니다. 현재 기기 또는 브라우저에서 사용자의 마지막 Google 계정 로그인 이벤트를 나타내는 타임스탬프로 생각하면 됩니다.
이 클레임은 인증 및 사용자에 관한 확인된 정보가 포함된 JSON 웹 토큰 (JWT)인 ID 토큰에 포함됩니다.
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에는 auth_time 및 amr을 요청하는 선택적 claims 매개변수가 포함됩니다.
OIDC 프로토콜
OAuth 플랫폼을 직접 사용하는 경우 선택사항인 claims 요청 매개변수에 auth_time을 추가하여 요청합니다. 클레임 JSON 객체의 id_token 필드 값을 {"auth_time":{"essential":true}}로 설정합니다. 마찬가지로 claims에 {"amr":{"essential":true}}을 추가하여 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를 참고하세요.
웹용 GIS
웹용 Google 계정으로 로그인 라이브러리에는 추가 클레임을 요청하는 HTML과 JavaScript라는 두 가지 API가 있습니다. 예를 들어 JavaScript API를 사용하여 auth_time 및 amr를 요청합니다.
<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용 GIS
setClaims 메서드와 Claim 객체는 auth_time 및 amr을 요청하는 데 사용됩니다.
androidx.credentials:credentials-play-services-auth 및 com.google.android.libraries.identity.googleid:googleid 라이브러리의 최신 버전을 사용하도록 빌드 종속 항목을 업데이트합니다.
setClaims를 사용하여 auth_time 및 amr 유형의 Claim 객체를 인스턴스화하여 로그인 옵션 목록에 추가합니다.
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
iOS용 Google 계정으로 로그인 SDK는 GIDSignIn 클래스에 authTimeClaim 객체와 claims 파라미터를 추가하여 auth_time 및 amr를 선택적으로 요청하는 데 사용됩니다.
ASWebAuthenticationSession를 사용하는 앱은 기기 전체 공유 쿠키 저장소를 업데이트합니다. GIDSignIn는 iOS 12 이상 및 macOS 10.15 이상에서 기본적으로 이 메서드를 사용합니다. 이 시나리오에서 Google 계정에 로그인하는 사용자는 인증되고 세션은 공유 쿠키 저장소에 저장됩니다. 여기서 auth_time는 앱 내에서뿐만 아니라 기기에서 사용자의 마지막 Google 인증입니다.
SFSafariViewController, WKWebView, UIWebView은 앱 내의 격리된 샌드박스에서 작동하므로 auth_time을 사용할 때는 사용하지 마세요. 여기서 auth_time는 사용자가 앱에 마지막으로 로그인한 시간입니다. 값이 항상 최신이므로 의미가 적습니다.
auth_time를 요청하려면 GoogleSignIn 종속 항목을 최신 버전으로 업데이트하고 authTimeClaim 객체를 만들어 claims 세트에 추가합니다.
amr를 요청하려면 amrClaim 객체를 만들고 claims 세트에 추가합니다.
Swift
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. }];
자세한 내용은 iOS 또는 macOS 앱에 Google 로그인 통합을 참고하세요.
응답
auth_time 또는 amr 클레임이 요청에 포함되면 iss (발급자), sub (주체), aud (대상), exp (만료 시간)과 같은 다른 표준 클레임과 함께 ID 토큰 페이로드 응답에 반환됩니다.
클레임이 누락된 것은 앱이 인증되지 않았거나 추가 설정이 사용 중지되었기 때문일 수 있습니다. 이는 기본값입니다. 설정의 안내에 따라 사용 중인 클라이언트 ID와 앱이 인증되었는지, 추가 클레임이 사용 설정되었는지 확인합니다.
auth_time 클레임의 값은 Unix epoch (1970년 1월 1일 00:00:00 UTC)부터 마지막 사용자 인증이 발생한 시간까지 경과된 시간을 초 단위로 나타내는 JSON 숫자입니다.
amr 클레임의 값은 마지막 Google 계정 로그인 이벤트 중에 사용된 인증 방법을 나타내는 문자열의 JSON 배열입니다.
다음은 auth_time 및 amr 클레임이 포함된 디코딩된 ID 토큰의 예입니다.
{ "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" }
ID 토큰에는 JWT가 발급된 시간을 나타내는 iat (발급 시점) 클레임도 포함되어 있습니다. iat 및 auth_time 클레임을 비교하면 특정 ID 토큰이 생성된 시점을 기준으로 사용자의 마지막 인증 이후 경과된 시간을 확인할 수 있습니다. 예를 들어 iat이 1748881189이고 auth_time이 1748875426이면 차이는 5763초이며 이는 경과 시간 1시간 36분 3초를 나타냅니다.