보안 번들

이 가이드에서는 Google 계정에 관한 추가 신뢰 신호를 반환하는 기능 모음을 설명합니다. 이러한 신뢰 신호는 계정 관리 시스템이 가입, 계정 생성, 재방문자를 위한 후속 단계 중에 위험에 기반한 결정을 내리는 데 도움이 됩니다.

설정

추가 클레임을 수신하려면 앱이 게시되고 인증되었으며 보안 번들 기능이 사용 설정되어 있어야 합니다.

앱이 게시되고 인증되었는지 확인하려면 다음 단계를 따르세요.

  1. Google 인증 플랫폼 열기
  2. 앱의 프로젝트 선택 또는 만들기
  3. 메뉴에서 잠재고객을 클릭합니다.
  4. 게시 상태프로덕션인지 확인합니다.
  5. 메뉴에서 인증 센터를 클릭합니다.
  6. 인증 상태인증됨인지 확인합니다.

    자세히 알아보려면 OAuth 앱 인증 고객센터를 참고하세요.

auth_time 클레임을 사용 설정하려면 다음을 실행하세요.

  1. Google 인증 플랫폼 열기
  2. 앱의 프로젝트 선택 또는 만들기
  3. 메뉴에서 설정을 클릭합니다.
  4. 고급 설정에서 세션 기간 클레임을 선택하여 auth_time을 사용 설정합니다.

지원되는 기능

이 섹션에서는 보안 번들을 구성하는 개별 기능에 대해 설명합니다.

auth_time

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

auth_time 클레임을 요청하는 데 사용되는 구체적인 메서드는 사용되는 API에 따라 다르지만 모든 API에는 auth_time를 요청하는 선택적 claims 매개변수가 포함됩니다.

OIDC 프로토콜

OAuth 플랫폼을 직접 사용하는 경우 선택적 클레임 요청 매개변수에 auth_time을 추가하여 요청합니다. 클레임 JSON 객체의 id_token 필드 값을 {"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

웹용 Google로 로그인 라이브러리에는 추가 클레임을 요청하는 HTML 및 JavaScript의 두 가지 API가 있습니다. 예를 들어 JavaScript API를 사용하여 auth_time를 요청합니다.

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

setClaims 메서드와 Claim 객체는 auth_time를 요청하는 데 사용됩니다.

androidx.credentials:credentials-play-services-authcom.google.android.libraries.identity.googleid:googleid 라이브러리의 최신 버전을 사용하도록 빌드 종속 항목을 업데이트합니다.

setClaims를 사용하여 로그인 옵션을 추가하여 auth_time 유형의 Claim 객체를 인스턴스화합니다.

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 계정으로 로그인으로 사용자 인증을 참고하세요.

auth_time 응답

auth_time 클레임이 요청에 포함되면 iss (발급자), sub (주체), aud (대상), exp (만료 시간)과 같은 다른 표준 클레임과 함께 ID 토큰 페이로드 응답에 표시됩니다. auth_time 클레임의 값은 마지막 사용자 인증이 발생한 시간까지 Unix epoch (1970년 1월 1일, 00:00:00 UTC) 이후 경과된 시간을 초로 나타내는 JSON 숫자입니다. 다음은 auth_time 클레임이 포함된 디코딩된 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,
  "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 (발급 시점) 클레임도 포함되어 있습니다. iatauth_time 클레임을 비교하면 특정 ID 토큰이 생성된 시점을 기준으로 사용자의 마지막 인증 이후 경과된 시간을 확인할 수 있습니다. 예를 들어 iat이 1748881189이고 auth_time이 1748875426이면 차이는 5763초이며 이는 경과 시간 1시간 36분 3초를 나타냅니다.