이 가이드에서는 Google 계정에 관한 추가 신뢰 신호를 반환하는 기능 모음을 설명합니다. 이러한 신뢰 신호는 계정 관리 시스템이 가입, 계정 생성, 재방문자를 위한 후속 단계 중에 위험에 기반한 결정을 내리는 데 도움이 됩니다.
설정
추가 클레임을 수신하려면 앱이 게시되고 인증되었으며 보안 번들 기능이 사용 설정되어 있어야 합니다.
앱이 게시되고 인증되었는지 확인하려면 다음 단계를 따르세요.
- Google 인증 플랫폼 열기
- 앱의 프로젝트 선택 또는 만들기
- 메뉴에서 잠재고객을 클릭합니다.
- 게시 상태가 프로덕션인지 확인합니다.
- 메뉴에서 인증 센터를 클릭합니다.
인증 상태가 인증됨인지 확인합니다.
자세히 알아보려면 OAuth 앱 인증 고객센터를 참고하세요.
auth_time 클레임을 사용 설정하려면 다음을 실행하세요.
- Google 인증 플랫폼 열기
- 앱의 프로젝트 선택 또는 만들기
- 메뉴에서 설정을 클릭합니다.
- 고급 설정에서 세션 기간 클레임을 선택하여
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-auth 및 com.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 (발급 시점) 클레임도 포함되어 있습니다. iat 및 auth_time 클레임을 비교하면 특정 ID 토큰이 생성된 시점을 기준으로 사용자의 마지막 인증 이후 경과된 시간을 확인할 수 있습니다. 예를 들어 iat이 1748881189이고 auth_time이 1748875426이면 차이는 5763초이며 이는 경과 시간 1시간 36분 3초를 나타냅니다.