CINXE.COM
Verify the Google ID token on your server side | Authentication | Google for Developers
<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="Google for Developers"> <meta property="og:type" content="website"><meta name="theme-color" content="#009688"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/developers/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/developers/css/app.css"> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/developers/images/favicon-new.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/developers/images/touchicon-180-new.png"><link rel="canonical" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token"><link rel="search" type="application/opensearchdescription+xml" title="Google for Developers" href="https://developers.google.com/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token" /><link rel="alternate" hreflang="x-default" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token" /><link rel="alternate" hreflang="ar" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=ar" /><link rel="alternate" hreflang="bn" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=bn" /><link rel="alternate" hreflang="zh-Hans" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=zh-tw" /><link rel="alternate" hreflang="fa" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=fa" /><link rel="alternate" hreflang="fr" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=fr" /><link rel="alternate" hreflang="de" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=de" /><link rel="alternate" hreflang="he" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=he" /><link rel="alternate" hreflang="hi" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=hi" /><link rel="alternate" hreflang="id" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=id" /><link rel="alternate" hreflang="it" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=it" /><link rel="alternate" hreflang="ja" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=ja" /><link rel="alternate" hreflang="ko" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=ko" /><link rel="alternate" hreflang="pl" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=pl" /><link rel="alternate" hreflang="pt-BR" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=pt-br" /><link rel="alternate" hreflang="ru" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=ru" /><link rel="alternate" hreflang="es-419" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=es-419" /><link rel="alternate" hreflang="th" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=th" /><link rel="alternate" hreflang="tr" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=tr" /><link rel="alternate" hreflang="vi" href="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token?hl=vi" /><title>Verify the Google ID token on your server side | Authentication | Google for Developers</title> <meta property="og:title" content="Verify the Google ID token on your server side | Authentication | Google for Developers"><meta property="og:url" content="https://developers.google.com/identity/gsi/web/guides/verify-google-id-token"><meta property="og:image" content="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/developers/images/opengraph/teal.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="675"><meta property="og:locale" content="en"><meta name="twitter:card" content="summary_large_image"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "Verify the Google ID token on your server side" } </script><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "Google Identity", "item": "https://developers.google.com/identity" },{ "@type": "ListItem", "position": 2, "name": "Authentication", "item": "https://developers.google.com/identity/authentication" },{ "@type": "ListItem", "position": 3, "name": "Verify the Google ID token on your server side", "item": "https://developers.google.com/identity/gsi/web/guides/verify-google-id-token" }] } </script> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="page" theme="teal" type="article" layout="docs" concierge='closed' display-toc pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <a href="#main-content" class="skip-link button"> Skip to main content </a> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner"> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item devsite-has-google-wordmark"> <a href="https://developers.google.com/identity" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Google Identity" > <svg class="devsite-google-wordmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 148 48"> <title>Google</title> <path class="devsite-google-wordmark-svg-path" d="M19.58,37.65c-9.87,0-18.17-8.04-18.17-17.91c0-9.87,8.3-17.91,18.17-17.91c5.46,0,9.35,2.14,12.27,4.94l-3.45,3.45c-2.1-1.97-4.93-3.49-8.82-3.49c-7.21,0-12.84,5.81-12.84,13.02c0,7.21,5.64,13.02,12.84,13.02c4.67,0,7.34-1.88,9.04-3.58c1.4-1.4,2.32-3.41,2.66-6.16H19.58v-4.89h16.47c0.18,0.87,0.26,1.92,0.26,3.06c0,3.67-1.01,8.21-4.24,11.44C28.93,35.9,24.91,37.65,19.58,37.65z M61.78,26.12c0,6.64-5.1,11.53-11.36,11.53s-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53S61.78,19.43,61.78,26.12z M56.8,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C53.84,33.11,56.8,30.22,56.8,26.12z M87.25,26.12c0,6.64-5.1,11.53-11.36,11.53c-6.26,0-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53C82.15,14.59,87.25,19.43,87.25,26.12zM82.28,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C79.32,33.11,82.28,30.22,82.28,26.12z M112.09,15.29v20.7c0,8.52-5.02,12.01-10.96,12.01c-5.59,0-8.95-3.76-10.22-6.81l4.41-1.83c0.79,1.88,2.71,4.1,5.81,4.1c3.8,0,6.16-2.36,6.16-6.77v-1.66h-0.18c-1.14,1.4-3.32,2.62-6.07,2.62c-5.76,0-11.05-5.02-11.05-11.49c0-6.51,5.28-11.57,11.05-11.57c2.75,0,4.93,1.22,6.07,2.58h0.18v-1.88H112.09z M107.64,26.16c0-4.06-2.71-7.03-6.16-7.03c-3.49,0-6.42,2.97-6.42,7.03c0,4.02,2.93,6.94,6.42,6.94C104.93,33.11,107.64,30.18,107.64,26.16z M120.97,3.06v33.89h-5.07V3.06H120.97z M140.89,29.92l3.93,2.62c-1.27,1.88-4.32,5.11-9.61,5.11c-6.55,0-11.28-5.07-11.28-11.53c0-6.86,4.77-11.53,10.71-11.53c5.98,0,8.91,4.76,9.87,7.34l0.52,1.31l-15.42,6.38c1.18,2.31,3.01,3.49,5.59,3.49C137.79,33.11,139.58,31.84,140.89,29.92zM128.79,25.77l10.31-4.28c-0.57-1.44-2.27-2.45-4.28-2.45C132.24,19.04,128.66,21.31,128.79,25.77z"/> </svg>Identity </a> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> <devsite-tabs class="upper-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Upper tabs"> <tab class="devsite-dropdown devsite-active "> <a href="https://developers.google.com/identity/authentication" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developers.google.com/identity/authentication" track-type="nav" track-metadata-position="nav - authentication" track-metadata-module="primary nav" aria-label="Authentication, selected" data-category="Site-Wide Custom Events" data-label="Tab: Authentication" track-name="authentication" > Authentication </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Authentication" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/authentication" track-metadata-position="nav - authentication" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Authentication" track-name="authentication" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Sign In with Google SDKs</li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/android-credential-manager" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/android-credential-manager" track-metadata-position="nav - authentication" track-metadata-module="tertiary nav" track-metadata-module_headline="sign in with google sdks" tooltip > <div class="devsite-nav-item-title"> Credential Manager for Android </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/gsi/web/guides/overview" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/gsi/web/guides/overview" track-metadata-position="nav - authentication" track-metadata-module="tertiary nav" track-metadata-module_headline="sign in with google sdks" tooltip > <div class="devsite-nav-item-title"> Sign In with Google for Web (including One Tap) </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/sign-in/ios/start" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/sign-in/ios/start" track-metadata-position="nav - authentication" track-metadata-module="tertiary nav" track-metadata-module_headline="sign in with google sdks" tooltip > <div class="devsite-nav-item-title"> Google Sign-In for iOS and macOS </div> </a> </li> </ul> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Industry standards</li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/passkeys" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/passkeys" track-metadata-position="nav - authentication" track-metadata-module="tertiary nav" track-metadata-module_headline="sign in with google sdks" tooltip > <div class="devsite-nav-item-title"> Passkeys </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/openid-connect/openid-connect" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/openid-connect/openid-connect" track-metadata-position="nav - authentication" track-metadata-module="tertiary nav" track-metadata-module_headline="sign in with google sdks" tooltip > <div class="devsite-nav-item-title"> OpenID Connect </div> </a> </li> </ul> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Legacy Sign In</li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/one-tap/android/overview" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/one-tap/android/overview" track-metadata-position="nav - authentication" track-metadata-module="tertiary nav" track-metadata-module_headline="sign in with google sdks" tooltip > <div class="devsite-nav-item-title"> One Tap sign-up/sign-in for Android </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/sign-in/android/legacy-start-integrating" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/sign-in/android/legacy-start-integrating" track-metadata-position="nav - authentication" track-metadata-module="tertiary nav" track-metadata-module_headline="sign in with google sdks" tooltip > <div class="devsite-nav-item-title"> Google Sign-In for Android </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/sign-in/web/sign-in" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/sign-in/web/sign-in" track-metadata-position="nav - authentication" track-metadata-module="tertiary nav" track-metadata-module_headline="sign in with google sdks" tooltip > <div class="devsite-nav-item-title"> Google Sign-In for Web </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown "> <a href="https://developers.google.com/identity/authorization" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developers.google.com/identity/authorization" track-type="nav" track-metadata-position="nav - authorization" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Authorization" track-name="authorization" > Authorization </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Authorization" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/authorization" track-metadata-position="nav - authorization" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Authorization" track-name="authorization" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Call Google APIs</li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/sign-in/android/authorize-access" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/sign-in/android/authorize-access" track-metadata-position="nav - authorization" track-metadata-module="tertiary nav" track-metadata-module_headline="call google apis" tooltip > <div class="devsite-nav-item-title"> Authorizing for Android </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/oauth2/web/guides/overview" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/oauth2/web/guides/overview" track-metadata-position="nav - authorization" track-metadata-module="tertiary nav" track-metadata-module_headline="call google apis" tooltip > <div class="devsite-nav-item-title"> Authorizing for Web </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/sign-in/ios/api-access" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/sign-in/ios/api-access" track-metadata-position="nav - authorization" track-metadata-module="tertiary nav" track-metadata-module_headline="call google apis" tooltip > <div class="devsite-nav-item-title"> Authorizing for iOS/macOS </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/protocols/oauth2" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/protocols/oauth2" track-metadata-position="nav - authorization" track-metadata-module="tertiary nav" track-metadata-module_headline="call google apis" tooltip > <div class="devsite-nav-item-title"> Using OAuth 2.0 </div> </a> </li> </ul> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Share data with Google apps and devices</li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/account-linking" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/account-linking" track-metadata-position="nav - authorization" track-metadata-module="tertiary nav" track-metadata-module_headline="call google apis" tooltip > <div class="devsite-nav-item-title"> Google Account Linking </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown "> <a href="https://developers.google.com/identity/credential-management" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developers.google.com/identity/credential-management" track-type="nav" track-metadata-position="nav - credential management" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Credential management" track-name="credential management" > Credential management </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Credential management" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/credential-management" track-metadata-position="nav - credential management" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Credential management" track-name="credential management" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Android</li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/android-credential-manager" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/android-credential-manager" track-metadata-position="nav - credential management" track-metadata-module="tertiary nav" track-metadata-module_headline="android" tooltip > <div class="devsite-nav-item-title"> Credential Manager </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/blockstore/android" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/blockstore/android" track-metadata-position="nav - credential management" track-metadata-module="tertiary nav" track-metadata-module_headline="android" tooltip > <div class="devsite-nav-item-title"> Blockstore </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/smartlock-passwords/android/associate-apps-and-sites" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/smartlock-passwords/android/associate-apps-and-sites" track-metadata-position="nav - credential management" track-metadata-module="tertiary nav" track-metadata-module_headline="android" tooltip > <div class="devsite-nav-item-title"> Digital Asset Links </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/guide/topics/text/autofill" track-type="nav" track-metadata-eventdetail="https://developer.android.com/guide/topics/text/autofill" track-metadata-position="nav - credential management" track-metadata-module="tertiary nav" track-metadata-module_headline="android" tooltip > <div class="devsite-nav-item-title"> Android autofill framework </div> </a> </li> </ul> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Web</li> <li class="devsite-nav-item"> <a href="https://web.dev/sign-in-form-best-practices/" track-type="nav" track-metadata-eventdetail="https://web.dev/sign-in-form-best-practices/" track-metadata-position="nav - credential management" track-metadata-module="tertiary nav" track-metadata-module_headline="android" tooltip > <div class="devsite-nav-item-title"> Autocomplete </div> </a> </li> </ul> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Cross-platform</li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/credential-sharing" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/credential-sharing" track-metadata-position="nav - credential management" track-metadata-module="tertiary nav" track-metadata-module_headline="android" tooltip > <div class="devsite-nav-item-title"> Seamless credential sharing </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown "> <a href="https://developers.google.com/identity/credential-verification" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developers.google.com/identity/credential-verification" track-type="nav" track-metadata-position="nav - credential verification" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Credential verification" track-name="credential verification" > Credential verification </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Credential verification" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/credential-verification" track-metadata-position="nav - credential verification" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Credential verification" track-name="credential verification" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Android</li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/sms-retriever/overview" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/sms-retriever/overview" track-metadata-position="nav - credential verification" track-metadata-module="tertiary nav" track-metadata-module_headline="android" tooltip > <div class="devsite-nav-item-title"> Verify users by SMS </div> </a> </li> <li class="devsite-nav-item"> <a href="https://developers.google.com/identity/phone-number-hint/android" track-type="nav" track-metadata-eventdetail="https://developers.google.com/identity/phone-number-hint/android" track-metadata-position="nav - credential verification" track-metadata-module="tertiary nav" track-metadata-module_headline="android" tooltip > <div class="devsite-nav-item-title"> Phone Number Hint </div> </a> </li> </ul> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Web</li> <li class="devsite-nav-item"> <a href="https://web.dev/web-otp/" track-type="nav" track-metadata-eventdetail="https://web.dev/web-otp/" track-metadata-position="nav - credential verification" track-metadata-module="tertiary nav" track-metadata-module_headline="android" tooltip > <div class="devsite-nav-item-title"> Verify phone numbers on the web </div> </a> </li> </ul> </div> </div> </div> </tab> </nav> </devsite-tabs> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="Authentication" tenant-name="Google for Developers" project-scope="/identity/authentication" url-scoped="https://developers.google.com/s/results/identity/authentication" > <form class="devsite-search-form" action="https://developers.google.com/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <devsite-user enable-profiles fp-auth id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section "> <div class="devsite-header-background"> <div class="devsite-product-id-row" > <div class="devsite-product-description-row"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> <a href="https://developers.google.com/identity/authentication" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Authentication" > Authentication </a> </li> </ul> </div> </div> <div class="devsite-doc-set-nav-row"> <devsite-tabs class="lower-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Lower tabs"> <tab > <a href="https://developers.google.com/identity/android-credential-manager" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developers.google.com/identity/android-credential-manager" track-type="nav" track-metadata-position="nav - credential manager for android" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Credential Manager for Android" track-name="credential manager for android" > Credential Manager for Android </a> </tab> <tab class="devsite-active"> <a href="https://developers.google.com/identity/gsi/web/guides/overview" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developers.google.com/identity/gsi/web/guides/overview" track-type="nav" track-metadata-position="nav - sign in with google for web" track-metadata-module="primary nav" aria-label="Sign In with Google for Web, selected" data-category="Site-Wide Custom Events" data-label="Tab: Sign In with Google for Web" track-name="sign in with google for web" > Sign In with Google for Web </a> </tab> <tab > <a href="https://developers.google.com/identity/sign-in/ios/start-integrating" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developers.google.com/identity/sign-in/ios/start-integrating" track-type="nav" track-metadata-position="nav - google sign-in for ios and macos" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Google Sign-In for iOS and macOS" track-name="google sign-in for ios and macos" > Google Sign-In for iOS and macOS </a> </tab> <tab > <a href="https://developers.google.com/identity/passkeys" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developers.google.com/identity/passkeys" track-type="nav" track-metadata-position="nav - passkeys" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Passkeys" track-name="passkeys" > Passkeys </a> </tab> <tab > <a href="https://developers.google.com/identity/openid-connect/openid-connect" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developers.google.com/identity/openid-connect/openid-connect" track-type="nav" track-metadata-position="nav - openid connect" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: OpenID Connect" track-name="openid connect" > OpenID Connect </a> </tab> </nav> </devsite-tabs> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars > <div class="devsite-book-nav-filter" > <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item devsite-has-google-wordmark"> <a href="https://developers.google.com/identity" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Google Identity" > <svg class="devsite-google-wordmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 148 48"> <title>Google</title> <path class="devsite-google-wordmark-svg-path" d="M19.58,37.65c-9.87,0-18.17-8.04-18.17-17.91c0-9.87,8.3-17.91,18.17-17.91c5.46,0,9.35,2.14,12.27,4.94l-3.45,3.45c-2.1-1.97-4.93-3.49-8.82-3.49c-7.21,0-12.84,5.81-12.84,13.02c0,7.21,5.64,13.02,12.84,13.02c4.67,0,7.34-1.88,9.04-3.58c1.4-1.4,2.32-3.41,2.66-6.16H19.58v-4.89h16.47c0.18,0.87,0.26,1.92,0.26,3.06c0,3.67-1.01,8.21-4.24,11.44C28.93,35.9,24.91,37.65,19.58,37.65z M61.78,26.12c0,6.64-5.1,11.53-11.36,11.53s-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53S61.78,19.43,61.78,26.12z M56.8,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C53.84,33.11,56.8,30.22,56.8,26.12z M87.25,26.12c0,6.64-5.1,11.53-11.36,11.53c-6.26,0-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53C82.15,14.59,87.25,19.43,87.25,26.12zM82.28,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C79.32,33.11,82.28,30.22,82.28,26.12z M112.09,15.29v20.7c0,8.52-5.02,12.01-10.96,12.01c-5.59,0-8.95-3.76-10.22-6.81l4.41-1.83c0.79,1.88,2.71,4.1,5.81,4.1c3.8,0,6.16-2.36,6.16-6.77v-1.66h-0.18c-1.14,1.4-3.32,2.62-6.07,2.62c-5.76,0-11.05-5.02-11.05-11.49c0-6.51,5.28-11.57,11.05-11.57c2.75,0,4.93,1.22,6.07,2.58h0.18v-1.88H112.09z M107.64,26.16c0-4.06-2.71-7.03-6.16-7.03c-3.49,0-6.42,2.97-6.42,7.03c0,4.02,2.93,6.94,6.42,6.94C104.93,33.11,107.64,30.18,107.64,26.16z M120.97,3.06v33.89h-5.07V3.06H120.97z M140.89,29.92l3.93,2.62c-1.27,1.88-4.32,5.11-9.61,5.11c-6.55,0-11.28-5.07-11.28-11.53c0-6.86,4.77-11.53,10.71-11.53c5.98,0,8.91,4.76,9.87,7.34l0.52,1.31l-15.42,6.38c1.18,2.31,3.01,3.49,5.59,3.49C137.79,33.11,139.58,31.84,140.89,29.92zM128.79,25.77l10.31-4.28c-0.57-1.44-2.27-2.45-4.28-2.45C132.24,19.04,128.66,21.31,128.79,25.77z"/> </svg>Identity </a> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <a href="/identity/authentication" class="devsite-nav-title gc-analytics-event devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Authentication" track-name="authentication" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Authentication" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Authentication </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Authentication" track-name="authentication" > <span class="devsite-nav-text" tooltip menu="Authentication"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Authentication"> </span> </span> </li> </ul> <ul class="devsite-nav-responsive-tabs"> <li class="devsite-nav-item"> <a href="/identity/android-credential-manager" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Credential Manager for Android" track-name="credential manager for android" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Credential Manager for Android" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Credential Manager for Android </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity/gsi/web/guides/overview" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Sign In with Google for Web" track-name="sign in with google for web" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Sign In with Google for Web" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip menu="_book"> Sign In with Google for Web </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="_book"> </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity/sign-in/ios/start-integrating" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Google Sign-In for iOS and macOS" track-name="google sign-in for ios and macos" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Sign-In for iOS and macOS" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Sign-In for iOS and macOS </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity/passkeys" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Passkeys" track-name="passkeys" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Passkeys" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Passkeys </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity/openid-connect/openid-connect" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: OpenID Connect" track-name="openid connect" data-category="Site-Wide Custom Events" data-label="Responsive Tab: OpenID Connect" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > OpenID Connect </span> </a> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/identity/authorization" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Authorization" track-name="authorization" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Authorization" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Authorization </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Authorization" track-name="authorization" > <span class="devsite-nav-text" tooltip menu="Authorization"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Authorization"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/identity/credential-management" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Credential management" track-name="credential management" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Credential management" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Credential management </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Credential management" track-name="credential management" > <span class="devsite-nav-text" tooltip menu="Credential management"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Credential management"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/identity/credential-verification" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Credential verification" track-name="credential verification" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Credential verification" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Credential verification </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Credential verification" track-name="credential verification" > <span class="devsite-nav-text" tooltip menu="Credential verification"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Credential verification"> </span> </span> </li> </ul> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Get started</span> </div></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/overview" ><span class="devsite-nav-text" tooltip>Overview</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/offerings" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/offerings" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/offerings" ><span class="devsite-nav-text" tooltip>Features</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/integrate" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/integrate" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/integrate" ><span class="devsite-nav-text" tooltip>Integration considerations</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/supported-browsers" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/supported-browsers" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/supported-browsers" ><span class="devsite-nav-text" tooltip>Supported browsers</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/get-google-api-clientid" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/get-google-api-clientid" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/get-google-api-clientid" ><span class="devsite-nav-text" tooltip>Setup</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/client-library" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/client-library" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/client-library" ><span class="devsite-nav-text" tooltip>Load the client library</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/tools/configurator" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/tools/configurator" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/tools/configurator" ><span class="devsite-nav-text" tooltip>Generate the integration code</span></a></li> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Case studies</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/identity/sign-in/case-studies" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/case-studies" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/case-studies" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/case-studies/pinterest" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/case-studies/pinterest" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/case-studies/pinterest" ><span class="devsite-nav-text" tooltip>Pinterest</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/case-studies/reddit" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/case-studies/reddit" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/case-studies/reddit" ><span class="devsite-nav-text" tooltip>Reddit</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/case-studies/iron-company" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/case-studies/iron-company" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/case-studies/iron-company" ><span class="devsite-nav-text" tooltip>Iron Company</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/case-studies/ebay" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/case-studies/ebay" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/case-studies/ebay" ><span class="devsite-nav-text" tooltip>eBay</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/case-studies/vikatan" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/case-studies/vikatan" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/case-studies/vikatan" ><span class="devsite-nav-text" tooltip>vikatan</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/case-studies/the-news-minute" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/case-studies/the-news-minute" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/case-studies/the-news-minute" ><span class="devsite-nav-text" tooltip>The News Minute</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/case-studies/lokmat" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/case-studies/lokmat" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/case-studies/lokmat" ><span class="devsite-nav-text" tooltip>Lokmat</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Sign in With Google button</span> </div></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/personalized-button" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/personalized-button" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/personalized-button" ><span class="devsite-nav-text" tooltip>Understand the button user experience</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/display-button" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/display-button" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/display-button" ><span class="devsite-nav-text" tooltip>Display the Sign in With Google button</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>One Tap guides</span> </div></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/features" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/features" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/features" ><span class="devsite-nav-text" tooltip>Understand the One Tap user experience</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/automatic-sign-in-sign-out" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/automatic-sign-in-sign-out" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/automatic-sign-in-sign-out" ><span class="devsite-nav-text" tooltip>Automatic sign-in and sign-out</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/display-google-one-tap" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/display-google-one-tap" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/display-google-one-tap" ><span class="devsite-nav-text" tooltip>Display the One Tap prompt</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/itp" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/itp" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/itp" ><span class="devsite-nav-text" tooltip>One Tap on ITP browsers</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Advanced topics</span> </div></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/verify-google-id-token" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/verify-google-id-token" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/verify-google-id-token" ><span class="devsite-nav-text" tooltip>Verify the Google ID token on your server side</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/toggle-outside-tap" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/toggle-outside-tap" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/toggle-outside-tap" ><span class="devsite-nav-text" tooltip>Toggle outside tap to close One Tap</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/change-sign-in-context" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/change-sign-in-context" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/change-sign-in-context" ><span class="devsite-nav-text" tooltip>Change the One Tap sign-in context</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/subdomains" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/subdomains" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/subdomains" ><span class="devsite-nav-text" tooltip>Display One Tap across subdomains</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/toggle-display-with-cookies" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/toggle-display-with-cookies" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/toggle-display-with-cookies" ><span class="devsite-nav-text" tooltip>Toggle the One Tap display with cookies</span></a></li> <li class="devsite-nav-item devsite-nav-deprecated"><a href="/identity/gsi/web/guides/change-position" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/change-position" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/change-position" ><span class="devsite-nav-text" tooltip>Change the One Tap prompt position</span><span class="devsite-nav-icon material-icons" data-icon="deprecated" data-title="Deprecated" aria-hidden="true"></span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/receive-notifications-prompt-ui-status" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/receive-notifications-prompt-ui-status" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/receive-notifications-prompt-ui-status" ><span class="devsite-nav-text" tooltip>Receive notifications on the prompt UI status</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/use-one-tap-js-api" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/use-one-tap-js-api" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/use-one-tap-js-api" ><span class="devsite-nav-text" tooltip>Use the JavaScript API</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/revoke" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/revoke" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/revoke" ><span class="devsite-nav-text" tooltip>Revoke an ID token</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/display-browsers-native-credential-manager" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/display-browsers-native-credential-manager" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/display-browsers-native-credential-manager" ><span class="devsite-nav-text" tooltip>Display the browser's native credential manager</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/handle-credential-responses-js-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/handle-credential-responses-js-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/handle-credential-responses-js-functions" ><span class="devsite-nav-text" tooltip>Handle credential responses with JavaScript functions</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/devices" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/devices" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/devices" ><span class="devsite-nav-text" tooltip>Sign-In on TVs and Limited Input Devices</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/amp/intermediate-iframe" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/amp/intermediate-iframe" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/amp/intermediate-iframe" ><span class="devsite-nav-text" tooltip>Integrate One Tap via an Iframe</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Resources</span> </div></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/fedcm-migration" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/fedcm-migration" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/fedcm-migration" ><span class="devsite-nav-text" tooltip>Migrate to FedCM</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/guides/migration" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/guides/migration" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/guides/migration" ><span class="devsite-nav-text" tooltip>Migrating from Google Sign-In</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/tools/configurator" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/tools/configurator" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/tools/configurator" ><span class="devsite-nav-text" tooltip>Code Generator</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Reference</span> </div></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/reference/html-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/reference/html-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/reference/html-reference" ><span class="devsite-nav-text" tooltip>HTML API</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/reference/js-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/reference/js-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/reference/js-reference" ><span class="devsite-nav-text" tooltip>JavaScript API</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/amp/nonamp-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/amp/nonamp-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/amp/nonamp-reference" ><span class="devsite-nav-text" tooltip>Intermediate Iframe API</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/amp/intermediate-support-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/amp/intermediate-support-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/amp/intermediate-support-reference" ><span class="devsite-nav-text" tooltip>Intermediate Iframe Support API</span></a></li> <li class="devsite-nav-item"><a href="/identity/gsi/web/reference/release-notes" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/reference/release-notes" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/reference/release-notes" ><span class="devsite-nav-text" tooltip>Release Notes</span></a></li> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Deprecated</span> </div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-deprecated"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Google Sign-In</span><span class="devsite-nav-icon material-icons" data-icon="deprecated" data-title="Deprecated" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/identity/sign-in/web/deprecation-and-sunset" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/web/deprecation-and-sunset" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/web/deprecation-and-sunset" ><span class="devsite-nav-text" tooltip>Deprecation and sunset</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Basics</span> </div></li><li class="devsite-nav-item"><a href="/identity/sign-in/web/sign-in" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/web/sign-in" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/web/sign-in" ><span class="devsite-nav-text" tooltip>Integrate Google Sign-In</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/web/people" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/web/people" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/web/people" ><span class="devsite-nav-text" tooltip>Get Profile Information</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/web/backend-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/web/backend-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/web/backend-auth" ><span class="devsite-nav-text" tooltip>Authenticate with a Backend Server</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Additional Capabilities</span> </div></li><li class="devsite-nav-item"><a href="/identity/sign-in/web/build-button" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/web/build-button" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/web/build-button" ><span class="devsite-nav-text" tooltip>Customize the Sign-In Button</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/web/session-state" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/web/session-state" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/web/session-state" ><span class="devsite-nav-text" tooltip>Monitor the User's Session State</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/web/incremental-auth" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/web/incremental-auth" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/web/incremental-auth" ><span class="devsite-nav-text" tooltip>Request Additional Permissions</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/web/listeners" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/web/listeners" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/web/listeners" ><span class="devsite-nav-text" tooltip>Integrate Sign-In Using Listeners</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/web/server-side-flow" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/web/server-side-flow" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/web/server-side-flow" ><span class="devsite-nav-text" tooltip>Google Sign-In for Server-Side Apps</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/web/disconnect" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/web/disconnect" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/web/disconnect" ><span class="devsite-nav-text" tooltip>Disconnect and Revoke Scopes</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Cross-Platform Integration</span> </div></li><li class="devsite-nav-item"><a href="/identity/sign-in/web/cross-platform-sign-in" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/web/cross-platform-sign-in" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/web/cross-platform-sign-in" ><span class="devsite-nav-text" tooltip>Cross-Platform Single Sign-In</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Resources</span> </div></li><li class="devsite-nav-item"><a href="/identity/sign-in/web/troubleshooting" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/web/troubleshooting" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/web/troubleshooting" ><span class="devsite-nav-text" tooltip>Troubleshooting</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/web/gsi-with-fedcm" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/web/gsi-with-fedcm" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/web/gsi-with-fedcm" ><span class="devsite-nav-text" tooltip>Use FedCM APIs</span></a></li><li class="devsite-nav-item"><a href="/identity/sign-in/web/quick-migration-guide" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/web/quick-migration-guide" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/web/quick-migration-guide" ><span class="devsite-nav-text" tooltip>Migrate from Google+ Sign-In</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Reference</span> </div></li><li class="devsite-nav-item devsite-nav-deprecated"><a href="/identity/sign-in/web/reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/sign-in/web/reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/sign-in/web/reference" ><span class="devsite-nav-text" tooltip>JavaScript Client Reference</span><span class="devsite-nav-icon material-icons" data-icon="deprecated" data-title="Deprecated" aria-hidden="true"></span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-deprecated"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Accelerated Mobile Pages</span><span class="devsite-nav-icon material-icons" data-icon="deprecated" data-title="Deprecated" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/identity/gsi/web/amp/amp" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/amp/amp" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/amp/amp" ><span class="devsite-nav-text" tooltip>Display One Tap in AMP pages</span></a></li><li class="devsite-nav-item"><a href="/identity/gsi/web/amp/amp-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /identity/gsi/web/amp/amp-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/identity/gsi/web/amp/amp-reference" ><span class="devsite-nav-text" tooltip>AMP Component API</span></a></li></ul></div></li> </ul> <ul class="devsite-nav-list" menu="Authentication" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Sign In with Google SDKs </span> </span> </li> <li class="devsite-nav-item"> <a href="/identity/android-credential-manager" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Credential Manager for Android" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Credential Manager for Android </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity/gsi/web/guides/overview" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Sign In with Google for Web (including One Tap)" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Sign In with Google for Web (including One Tap) </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity/sign-in/ios/start" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Sign-In for iOS and macOS" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Sign-In for iOS and macOS </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Industry standards </span> </span> </li> <li class="devsite-nav-item"> <a href="/identity/passkeys" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Passkeys" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Passkeys </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity/openid-connect/openid-connect" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: OpenID Connect" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > OpenID Connect </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Legacy Sign In </span> </span> </li> <li class="devsite-nav-item"> <a href="/identity/one-tap/android/overview" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: One Tap sign-up/sign-in for Android" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > One Tap sign-up/sign-in for Android </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity/sign-in/android/legacy-start-integrating" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Sign-In for Android" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Sign-In for Android </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity/sign-in/web/sign-in" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Sign-In for Web" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Sign-In for Web </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Authorization" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Call Google APIs </span> </span> </li> <li class="devsite-nav-item"> <a href="/identity/sign-in/android/authorize-access" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Authorizing for Android" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Authorizing for Android </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity/oauth2/web/guides/overview" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Authorizing for Web" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Authorizing for Web </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity/sign-in/ios/api-access" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Authorizing for iOS/macOS" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Authorizing for iOS/macOS </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity/protocols/oauth2" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Using OAuth 2.0" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Using OAuth 2.0 </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Share data with Google apps and devices </span> </span> </li> <li class="devsite-nav-item"> <a href="/identity/account-linking" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Account Linking" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Account Linking </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Credential management" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Android </span> </span> </li> <li class="devsite-nav-item"> <a href="/identity/android-credential-manager" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Credential Manager" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Credential Manager </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity/blockstore/android" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Blockstore" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Blockstore </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity/smartlock-passwords/android/associate-apps-and-sites" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Digital Asset Links" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Digital Asset Links </span> </a> </li> <li class="devsite-nav-item"> <a href="https://developer.android.com/guide/topics/text/autofill" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Android autofill framework" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Android autofill framework </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Web </span> </span> </li> <li class="devsite-nav-item"> <a href="https://web.dev/sign-in-form-best-practices/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Autocomplete" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Autocomplete </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Cross-platform </span> </span> </li> <li class="devsite-nav-item"> <a href="/identity/credential-sharing" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Seamless credential sharing" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Seamless credential sharing </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Credential verification" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Android </span> </span> </li> <li class="devsite-nav-item"> <a href="/identity/sms-retriever/overview" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Verify users by SMS" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Verify users by SMS </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity/phone-number-hint/android" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Phone Number Hint" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Phone Number Hint </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Web </span> </span> </li> <li class="devsite-nav-item"> <a href="https://web.dev/web-otp/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Verify phone numbers on the web" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Verify phone numbers on the web </span> </a> </li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" id="main-content" class="devsite-main-content" has-book-nav > <devsite-content> <article class="devsite-article"> <div class="devsite-banner devsite-banner-announcement nocontent" background="google-red" > <div class="devsite-banner-message"> <div class="devsite-banner-message-text"> Google Identity Services is migrating to FedCM APIs. Follow the <a href="/identity/gsi/web/guides/fedcm-migration">migration guide</a> to review potential changes and avoid negative impacts for user sign-in to your website. </div> </div> </div> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://developers.google.com/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="" > Home </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/products" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="" > Products </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/identity" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="3" track-type="globalNav" track-name="breadcrumb" track-metadata-position="3" track-metadata-eventdetail="Google Identity" > Google Identity </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/identity/authentication" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="4" track-type="globalNav" track-name="breadcrumb" track-metadata-position="4" track-metadata-eventdetail="Authentication" > Authentication </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/identity/gsi/web/guides/overview" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="5" track-type="globalNav" track-name="breadcrumb" track-metadata-position="5" track-metadata-eventdetail="" > Sign In with Google for Web </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <devsite-feedback position="header" project-name="Authentication" product-id="5186570" bucket="Identity guides" context="External devsite feedback" version="t-devsite-webserver-20250211-r00-rc00.466928320959134316" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="header" class="nocontent" project-icon="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/developers/images/touchicon-180-new.png" > <button> Send feedback </button> </devsite-feedback> <h1 class="devsite-page-title" tabindex="-1"> Verify the Google ID token on your server side </h1> <devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <devsite-key-takeaways></devsite-key-takeaways> <div class="devsite-page-title-meta"><devsite-view-release-notes></devsite-view-release-notes></div> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded > </devsite-toc> <div class="devsite-article-body clearfix "> <p>After Google returns an ID token, it's submitted by an HTTP <code translate="no" dir="ltr">POST</code> method request, with the parameter name <code translate="no" dir="ltr">credential</code>, to your login endpoint.</p> <p>The following is an example in the Python language that shows the usual steps to validate and consume the ID token:</p> <ol> <li><p>Verify the Cross-Site Request Forgery (CSRF) token. When you submit credentials to your login endpoint, we use the double-submit-cookie pattern to prevent CSRF attacks. Before each submission, we generate a token. Then, the token is put into both the cookie and the post body, as shown in the following code example:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="scdoc">csrf_token_cookie = self.request.cookies.get('g_csrf_token') if not csrf_token_cookie: webapp2.abort(400, 'No CSRF token in Cookie.') csrf_token_body = self.request.get('g_csrf_token') if not csrf_token_body: webapp2.abort(400, 'No CSRF token in post body.') if csrf_token_cookie != csrf_token_body: webapp2.abort(400, 'Failed to verify double submit cookie.')</pre></devsite-code></li> <li><p>Verify the ID token.</p> <p>To verify that the token is valid, ensure that the following criteria are satisfied:</p> <ul> <li>The ID token is properly signed by Google. Use Google's public keys (available in <a href="https://www.googleapis.com/oauth2/v3/certs">JWK</a> or <a href="https://www.googleapis.com/oauth2/v1/certs">PEM</a> format) to verify the token's signature. These keys are regularly rotated; examine the <code translate="no" dir="ltr">Cache-Control</code> header in the response to determine when you should retrieve them again.</li> <li>The value of <code translate="no" dir="ltr">aud</code> in the ID token is equal to one of your app's client IDs. This check is necessary to prevent ID tokens issued to a malicious app being used to access data about the same user on your app's backend server.</li> <li>The value of <code translate="no" dir="ltr">iss</code> in the ID token is equal to <code translate="no" dir="ltr">accounts.google.com</code> or <code translate="no" dir="ltr">https://accounts.google.com</code>. <li>The expiry time (<code translate="no" dir="ltr">exp</code>) of the ID token has not passed.</li> <li>If you need to validate that the ID token represents a Google Workspace or Cloud organization account, you can check the <code translate="no" dir="ltr">hd</code> claim, which indicates the hosted domain of the user. This must be used when restricting access to a resource to only members of certain domains. The absence of this claim indicates that the account does not belong to a Google hosted domain.</li> </ul> <p> Using the <code translate="no" dir="ltr">email</code>, <code translate="no" dir="ltr">email_verified</code> and <code translate="no" dir="ltr">hd</code> fields, you can determine if Google hosts and is authoritative for an email address. In the cases where Google is authoritative, the user is known to be the legitimate account owner, and you may skip password or other challenge methods. </p> <p> Cases where Google is authoritative: <ul> <li><code translate="no" dir="ltr">email</code> has a <code translate="no" dir="ltr">@gmail.com</code> suffix, this is a Gmail account.</li> <li><code translate="no" dir="ltr">email_verified</code> is true and <code translate="no" dir="ltr">hd</code> is set, this is a G Suite account.</li> </ul> </p> <p> Users may register for Google Accounts without using Gmail or G Suite. When <code translate="no" dir="ltr">email</code> does not contain a <code translate="no" dir="ltr">@gmail.com</code> suffix and <code translate="no" dir="ltr">hd</code> is absent, Google is not authoritative and password or other challenge methods are recommended to verify the user. <code translate="no" dir="ltr">email_verified</code> can also be true as Google initially verified the user when the Google account was created, however ownership of the third party email account may have since changed. </p> <p>Rather than writing your own code to perform these verification steps, we strongly recommend using a Google API client library for your platform, or a general-purpose JWT library. For development and debugging, you can call our <code translate="no" dir="ltr">tokeninfo</code> validation endpoint.</p> <h3 id="using-a-google-api-client-library" data-text="Using a Google API Client Library" tabindex="-1">Using a Google API Client Library</h3> <p>Using one of the <a href="/api-client-library">Google API Client Libraries</a> (e.g. <a href="/api-client-library/java/google-api-java-client/setup">Java</a>, <a href="https://github.com/google/google-api-nodejs-client">Node.js</a>, <a href="/api-client-library/php/start/get_started">PHP</a>, <a href="https://google-auth.readthedocs.io/">Python</a>) is the recommended way to validate Google ID tokens in a production environment.</p> <section class="kd-tabbed-horz"> <article class="selected"> <header>Java</header> <p>To validate an ID token in Java, use the <a href="https://github.com/googleapis/google-api-java-client/blob/master/google-api-client/src/main/java/com/google/api/client/googleapis/auth/oauth2/GoogleIdTokenVerifier.java"> GoogleIdTokenVerifier</a> object. For example:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.api.client.googleapis.auth.oauth2.GoogleIdToken</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-o">...</span> <span class="devsite-syntax-n">GoogleIdTokenVerifier</span> <span class="devsite-syntax-n">verifier</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">new</span> <span class="devsite-syntax-n">GoogleIdTokenVerifier</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Builder</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">transport</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">jsonFactory</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">Specify</span> <span class="devsite-syntax-n">the</span> <span class="devsite-syntax-n">WEB_CLIENT_ID</span> <span class="devsite-syntax-n">of</span> <span class="devsite-syntax-n">the</span> <span class="devsite-syntax-n">app</span> <span class="devsite-syntax-n">that</span> <span class="devsite-syntax-n">accesses</span> <span class="devsite-syntax-n">the</span> <span class="devsite-syntax-n">backend</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">setAudience</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Collections</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">singletonList</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">WEB_CLIENT_ID</span><span class="devsite-syntax-p">))</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">Or</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-n">multiple</span> <span class="devsite-syntax-n">clients</span> <span class="devsite-syntax-n">access</span> <span class="devsite-syntax-n">the</span> <span class="devsite-syntax-n">backend</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-o">//.</span><span class="devsite-syntax-n">setAudience</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Arrays</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">asList</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">WEB_CLIENT_ID_1</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">WEB_CLIENT_ID_2</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">WEB_CLIENT_ID_3</span><span class="devsite-syntax-p">))</span> <span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">build</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Receive</span> <span class="devsite-syntax-n">idTokenString</span> <span class="devsite-syntax-n">by</span> <span class="devsite-syntax-n">HTTPS</span> <span class="devsite-syntax-n">POST</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">GoogleIdToken</span> <span class="devsite-syntax-n">idToken</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">verifier</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">verify</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">idTokenString</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">idToken</span> <span class="devsite-syntax-o">!=</span> <span class="devsite-syntax-n">null</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-n">Payload</span> <span class="devsite-syntax-n">payload</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">idToken</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">getPayload</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">Print</span> <span class="devsite-syntax-n">user</span> <span class="devsite-syntax-n">identifier</span> <span class="devsite-syntax-n">String</span> <span class="devsite-syntax-n">userId</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">payload</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">getSubject</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-n">System</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">out</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">println</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"User ID: "</span> <span class="devsite-syntax-o">+</span> <span class="devsite-syntax-n">userId</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">Get</span> <span class="devsite-syntax-n">profile</span> <span class="devsite-syntax-n">information</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">payload</span> <span class="devsite-syntax-n">String</span> <span class="devsite-syntax-n">email</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">payload</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">getEmail</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-n">boolean</span> <span class="devsite-syntax-n">emailVerified</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">Boolean</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">valueOf</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">payload</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">getEmailVerified</span><span class="devsite-syntax-p">());</span> <span class="devsite-syntax-n">String</span> <span class="devsite-syntax-n">name</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">payload</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">get</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"name"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">String</span> <span class="devsite-syntax-n">pictureUrl</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">payload</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">get</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"picture"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">String</span> <span class="devsite-syntax-n">locale</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">payload</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">get</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"locale"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">String</span> <span class="devsite-syntax-n">familyName</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">payload</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">get</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"family_name"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">String</span> <span class="devsite-syntax-n">givenName</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">payload</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">get</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"given_name"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">Use</span> <span class="devsite-syntax-ow">or</span> <span class="devsite-syntax-n">store</span> <span class="devsite-syntax-n">profile</span> <span class="devsite-syntax-n">information</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-o">...</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">else</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-n">System</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">out</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">println</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"Invalid ID token."</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span></pre></devsite-code> <p>The <code translate="no" dir="ltr">GoogleIdTokenVerifier.verify()</code> method verifies the JWT signature, the <code translate="no" dir="ltr">aud</code> claim, the <code translate="no" dir="ltr">iss</code> claim, and the <code translate="no" dir="ltr">exp</code> claim.</p> <p>If you need to validate that the ID token represents a Google Workspace or Cloud organization account, you can verify the <code translate="no" dir="ltr">hd</code> claim by checking the domain name returned by the <code translate="no" dir="ltr">Payload.getHostedDomain()</code> method. The domain of the <code translate="no" dir="ltr">email</code> claim is insufficient to ensure that the account is managed by a domain or organization.</p> </article> <article> <header>Node.js</header> <p>To validate an ID token in Node.js, use the <a href="https://github.com/google/google-auth-library-nodejs">Google Auth Library for Node.js</a>. Install the library: <div></div><devsite-code><pre translate="no" dir="ltr" is-upgraded>npm install google-auth-library --save</pre></devsite-code> Then, call the <code translate="no" dir="ltr">verifyIdToken()</code> function. For example:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><span class="devsite-syntax-k">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span><span class="devsite-syntax-n">OAuth2Client</span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">require</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'google-auth-library'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-k">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">client</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">OAuth2Client</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-n">async</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">function</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">verify</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ticket</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">await</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">client</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">verifyIdToken</span><span class="devsite-syntax-p">({</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">idToken</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">token</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">audience</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">WEB_CLIENT_ID</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Specify</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">the</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">WEB_CLIENT_ID</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">of</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">the</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">app</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">that</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">accesses</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">the</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">backend</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Or</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">multiple</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">clients</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">access</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">the</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">backend</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-n">WEB_CLIENT_ID_1</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">WEB_CLIENT_ID_2</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">WEB_CLIENT_ID_3</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">payload</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ticket</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">getPayload</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">userid</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">payload</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'sub'</span><span class="devsite-syntax-p">];</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">If</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">the</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">request</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">specified</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">a</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Google</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Workspace</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">domain</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">domain</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">payload</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'hd'</span><span class="devsite-syntax-p">];</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-n">verify</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">catch</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">console</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">error</span><span class="devsite-syntax-p">);</span></pre></devsite-code> <p>The <code translate="no" dir="ltr">verifyIdToken</code> function verifies the JWT signature, the <code translate="no" dir="ltr">aud</code> claim, the <code translate="no" dir="ltr">exp</code> claim, and the <code translate="no" dir="ltr">iss</code> claim.</p> <p>If you need to validate that the ID token represents a Google Workspace or Cloud organization account, you can check the <code translate="no" dir="ltr">hd</code> claim, which indicates the hosted domain of the user. This must be used when restricting access to a resource to only members of certain domains. The absence of this claim indicates that the account does not belong to a Google hosted domain. </p> </article> <article> <header>PHP</header> <p>To validate an ID token in PHP, use the <a href="https://github.com/google/google-api-php-client/">Google API Client Library for PHP</a>. Install the library (for example, using Composer): <div></div><devsite-code><pre translate="no" dir="ltr" is-upgraded>composer require google/apiclient</pre></devsite-code> Then, call the <code translate="no" dir="ltr">verifyIdToken()</code> function. For example:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><span class="devsite-syntax-n">require_once</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'vendor/autoload.php'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Get</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">$</span><span class="devsite-syntax-n">id_token</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">via</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">HTTPS</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">POST</span><span class="devsite-syntax-o">.</span> <span class="devsite-syntax-o">$</span><span class="devsite-syntax-n">client</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Google_Client</span><span class="devsite-syntax-p">([</span><span class="devsite-syntax-s1">'client_id'</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=></span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">$</span><span class="devsite-syntax-n">WEB_CLIENT_ID</span><span class="devsite-syntax-p">]);</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Specify</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">the</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">WEB_CLIENT_ID</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">of</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">the</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">app</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">that</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">accesses</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">the</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">backend</span> <span class="devsite-syntax-o">$</span><span class="devsite-syntax-n">payload</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">$</span><span class="devsite-syntax-n">client</span><span class="devsite-syntax-o">-></span><span class="devsite-syntax-n">verifyIdToken</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">$</span><span class="devsite-syntax-n">id_token</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">$</span><span class="devsite-syntax-n">payload</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">$</span><span class="devsite-syntax-n">userid</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">$</span><span class="devsite-syntax-n">payload</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'sub'</span><span class="devsite-syntax-p">];</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">If</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">the</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">request</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">specified</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">a</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Google</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Workspace</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">domain</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//$</span><span class="devsite-syntax-n">domain</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">$</span><span class="devsite-syntax-n">payload</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'hd'</span><span class="devsite-syntax-p">];</span> <span class="devsite-syntax-p">}</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">else</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Invalid</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ID</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">token</span> <span class="devsite-syntax-p">}</span></pre></devsite-code> <p>The <code translate="no" dir="ltr">verifyIdToken</code> function verifies the JWT signature, the <code translate="no" dir="ltr">aud</code> claim, the <code translate="no" dir="ltr">exp</code> claim, and the <code translate="no" dir="ltr">iss</code> claim.</p> <p>If you need to validate that the ID token represents a Google Workspace or Cloud organization account, you can check the <code translate="no" dir="ltr">hd</code> claim, which indicates the hosted domain of the user. This must be used when restricting access to a resource to only members of certain domains. The absence of this claim indicates that the account does not belong to a Google hosted domain. </p> </article> <article> <header>Python</header> <p>To validate an ID token in Python, use the <a href="https://google-auth.readthedocs.io/en/latest/reference/google.oauth2.id_token.html#google.oauth2.id_token.verify_oauth2_token">verify_oauth2_token</a> function. For example:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">google.oauth2</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">id_token</span> <span class="devsite-syntax-kn">from</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nn">google.auth.transport</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">requests</span> <span class="devsite-syntax-c1"># (Receive token by HTTPS POST)</span> <span class="devsite-syntax-c1"># ...</span> <span class="devsite-syntax-k">try</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-c1"># Specify the WEB_CLIENT_ID of the app that accesses the backend:</span> <span class="devsite-syntax-n">idinfo</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">id_token</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">verify_oauth2_token</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">token</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">requests</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Request</span><span class="devsite-syntax-p">(),</span> <span class="devsite-syntax-n">WEB_CLIENT_ID</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Or, if multiple clients access the backend server:</span> <span class="devsite-syntax-c1"># idinfo = id_token.verify_oauth2_token(token, requests.Request())</span> <span class="devsite-syntax-c1"># if idinfo['aud'] not in [WEB_CLIENT_ID_1, WEB_CLIENT_ID_2, WEB_CLIENT_ID_3]:</span> <span class="devsite-syntax-c1"># raise ValueError('Could not verify audience.')</span> <span class="devsite-syntax-c1"># If the request specified a Google Workspace domain</span> <span class="devsite-syntax-c1"># if idinfo['hd'] != DOMAIN_NAME:</span> <span class="devsite-syntax-c1"># raise ValueError('Wrong domain name.')</span> <span class="devsite-syntax-c1"># ID token is valid. Get the user's Google Account ID from the decoded token.</span> <span class="devsite-syntax-n">userid</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">idinfo</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'sub'</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-k">except</span> <span class="devsite-syntax-ne">ValueError</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-c1"># Invalid token</span> <span class="devsite-syntax-k">pass</span></pre></devsite-code> <p>The <code translate="no" dir="ltr">verify_oauth2_token</code> function verifies the JWT signature, the <code translate="no" dir="ltr">aud</code> claim, and the <code translate="no" dir="ltr">exp</code> claim. You must also verify the <code translate="no" dir="ltr">hd</code> claim (if applicable) by examining the object that <code translate="no" dir="ltr">verify_oauth2_token</code> returns. If multiple clients access the backend server, also manually verify the <code translate="no" dir="ltr">aud</code> claim.</p> </article> </section> <aside class="key-point"><strong>Key Point:</strong><span> The ID token is returned in the <code translate="no" dir="ltr">credential</code> field, instead of the <code translate="no" dir="ltr">g_csrf_token</code> field.</span></aside></li> <li><p>Once the token's validity is confirmed, you can use the information in the <a href="/identity/gsi/web/reference/js-reference#credential">Google ID token</a> to correlate the account status of your site:</p> <ul> <li><p><strong>An unregistered user:</strong> You can show a sign-up user interface (UI) that allows the user to provide additional profile information, if required. It also allows the user to silently create the new account and a logged-in user session.</p></li> <li><p><strong>An existing account that already exists in your site:</strong> You can show a web page that allows the end user to input their password and link the legacy account with their Google credentials. This confirms that the user has access to the existing account.</p></li> <li><p><strong>A returning federated user:</strong> You can silently sign the user in.</p></li> </ul></li> </ol> <aside class="key-point"><strong>Key Point:</strong><span> Only use <a href="/identity/gsi/web/reference/js-reference#credential">Google ID token</a> <strong><code translate="no" dir="ltr">sub</code></strong> field as identifier for the user as it is unique among all Google Accounts and never reused. You should store the <strong><code translate="no" dir="ltr">sub</code></strong> field and associate it with the user in your account management system. While you can use the email address from the ID token to check if the user has a existing account, <strong>don't</strong> use email address as an identifier because a Google Account can have multiple email addresses at different points in time.</span></aside> </div> <devsite-recommendations display="in-page" hidden yield> </devsite-recommendations> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <devsite-feedback position="footer" project-name="Authentication" product-id="5186570" bucket="Identity guides" context="External devsite feedback" version="t-devsite-webserver-20250211-r00-rc00.466928320959134316" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="footer" class="nocontent" project-icon="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/developers/images/touchicon-180-new.png" > <button> Send feedback </button> </devsite-feedback> <devsite-recommendations id="recommendations-link" yield></devsite-recommendations> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2024-10-31 UTC.</p> </devsite-content-footer> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-thumb-rating-feedback"> <devsite-feedback position="thumb-rating" project-name="Authentication" product-id="5186570" bucket="Identity guides" context="External devsite feedback" version="t-devsite-webserver-20250211-r00-rc00.466928320959134316" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="thumb-rating" class="nocontent" project-icon="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/developers/images/touchicon-180-new.png" > <button> Need to tell us more? </button> </devsite-feedback> </template> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-10-31 UTC."],[[["Google Identity Services uses an HTTP `POST` request to your login endpoint with the ID token in the `credential` parameter."],["Implement CSRF protection using the double-submit-cookie pattern to enhance security."],["Validate the Google ID token to ensure its authenticity before using the user information."],["Utilize the `sub` field from the ID token as the unique user identifier for account management."],["Handle different user scenarios, such as new sign-ups, existing accounts, and returning federated users, based on the ID token information."]]],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> <nav class="devsite-footer-promos nocontent" aria-label="Promotions"> <ul class="devsite-footer-promos-list"> <li class="devsite-footer-promo"> <a href="//github.com/googlesamples/google-services" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Promo Link (index 1)" > <picture> <img class="devsite-footer-promo-icon" src="/static/site-assets/logo-github.svg" loading="lazy" alt="GitHub"> </picture> <span class="devsite-footer-promo-label"> GitHub </span> </a> <div class="devsite-footer-promo-description">Fork our samples and try them yourself</div> </li> <li class="devsite-footer-promo"> <a href="//stackoverflow.com/questions/tagged/google-signin" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Promo Link (index 2)" > <picture> <img class="devsite-footer-promo-icon" src="/static/site-assets/logo-stack-overflow.svg" loading="lazy" alt="Stack Overflow"> </picture> <span class="devsite-footer-promo-label"> Stack Overflow </span> </a> <div class="devsite-footer-promo-description">Ask a question under the google-signin tag</div> </li> <li class="devsite-footer-promo"> <a href="//googledevelopers.blogspot.com/search/label/sign-in" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Promo Link (index 3)" > <picture> <img class="devsite-footer-promo-icon" src="/static/site-assets/developers_64dp.png" loading="lazy" alt="Blog"> </picture> <span class="devsite-footer-promo-label"> Blog </span> </a> <div class="devsite-footer-promo-description">The latest news on the Google Developers blog</div> </li> <li class="devsite-footer-promo"> <a href="https://blog.chromium.org" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Promo Link (index 4)" > <picture> <img class="devsite-footer-promo-icon" src="https://www.gstatic.com/images/icons/material/product/2x/chrome_chromium_64dp.png" loading="lazy" alt="Chromium Blog"> </picture> <span class="devsite-footer-promo-label"> Chromium Blog </span> </a> <div class="devsite-footer-promo-description">The latest news on the Chromium blog.</div> </li> </ul> </nav> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Product Info</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/terms" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Terms of Service </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/identity/branding-guidelines" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Branding Guidelines </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Help</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//stackoverflow.com/questions/tagged/google-signin" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Sign In With Google </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//stackoverflow.com/questions/tagged/google-identity" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Google Identity </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Developer consoles</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//console.developers.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Google API Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//console.cloud.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Google Cloud Platform Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//play.google.com/apps/publish" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Google Play Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//console.firebase.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Firebase Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//console.actions.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Actions on Google Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//cast.google.com/publish" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 6)" > Cast SDK Developer Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//chrome.google.com/webstore/developer/dashboard" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 7)" > Chrome Web Store Dashboard </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//console.home.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 8)" > Google Home Developer Console </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-sites" aria-label="Other Google Developers websites"> <a href="https://developers.google.com/" class="devsite-footer-sites-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Developers Link"> <picture> <img class="devsite-footer-sites-logo" src="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/developers/images/lockup-google-for-developers.svg" loading="lazy" alt="Google Developers"> </picture> </a> <ul class="devsite-footer-sites-list"> <li class="devsite-footer-sites-item"> <a href="//developer.android.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Android Link" > Android </a> </li> <li class="devsite-footer-sites-item"> <a href="//developer.chrome.com/home" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Chrome Link" > Chrome </a> </li> <li class="devsite-footer-sites-item"> <a href="//firebase.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Firebase Link" > Firebase </a> </li> <li class="devsite-footer-sites-item"> <a href="//cloud.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Cloud Platform Link" > Google Cloud Platform </a> </li> <li class="devsite-footer-sites-item"> <a href="//ai.google.dev/" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google AI Link" > Google AI </a> </li> <li class="devsite-footer-sites-item"> <a href="/products" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer All products Link" > All products </a> </li> </ul> </nav> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="/terms/site-terms" data-category="Site-Wide Custom Events" data-label="Footer Terms link" > Terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" > Privacy </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true" > Manage cookies </a> </li> <li class="devsite-footer-utility-item devsite-footer-utility-button"> <span class="devsite-footer-utility-description">Sign up for the Google for Developers newsletter</span> <a class="devsite-footer-utility-link gc-analytics-event" href="/newsletter/subscribe" data-category="Site-Wide Custom Events" data-label="Footer Subscribe link" > Subscribe </a> </li> </ul> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> <devsite-concierge data-info-panel data-ai-panel data-api-explorer-panel > </devsite-concierge> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[{"dimensions": {"dimension6": "en", "dimension5": "en", "dimension1": "Signed out", "dimension11": false, "dimension3": false, "dimension4": "Authentication"}, "gaid": "UA-24532603-1", "metrics": {"ratings_count": "metric2", "ratings_value": "metric1"}, "purpose": 1}]</script> <script type="application/json" tag-management>{"at": "True", "ga4": [{"id": "G-272J68FCRF", "purpose": 1}], "ga4p": [{"id": "G-272J68FCRF", "purpose": 1}], "gtm": [], "parameters": {"internalUser": "False", "language": {"machineTranslated": "False", "requested": "en", "served": "en"}, "pageType": "article", "projectName": "Authentication", "signedIn": "False", "tenant": "developers", "recommendations": {"sourcePage": "", "sourceType": 0, "sourceRank": 0, "sourceIdenticalDescriptions": 0, "sourceTitleWords": 0, "sourceDescriptionWords": 0, "experiment": ""}, "experiment": {"ids": ""}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <script nonce="A9UbM1y4G8kSyjw3luCAchtkjyrUyF"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/developers/js/app_loader.js', '[1,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/developers","https://developers-dot-devsite-v2-prod.appspot.com",null,null,["/_pwa/developers/manifest.json","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/developers/images/favicon-new.png","https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,116,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyAP-jjEJBzmIyKR4F-3XITp8yM9T1gEEI8","AIzaSyB6xiKGDR5O3Ak2okS4rLkauxGUG7XP0hg","developers.google.com","AIzaSyAQk0fBONSGUqCNznf6Krs82Ap1-NV6J4o","AIzaSyCCxcqdrZ_7QMeLCRY20bh_SXdAYqy70KY",null,null,null,["Concierge__enable_concierge_restricted","MiscFeatureFlags__developers_footer_image","Cloud__enable_legacy_calculator_redirect","Analytics__enable_clearcut_logging","CloudShell__cloud_code_overflow_menu","MiscFeatureFlags__enable_variable_operator","Profiles__require_profile_eligibility_for_signin","Profiles__enable_completecodelab_endpoint","Significatio__enable_by_tenant","Cloud__enable_cloudx_ping","MiscFeatureFlags__enable_view_transitions","DevPro__enable_developer_subscriptions","Cloud__enable_llm_concierge_chat","Profiles__enable_join_program_group_endpoint","Profiles__enable_complete_playlist_endpoint","Cloud__enable_cloud_facet_chat","Profiles__enable_awarding_url","CloudShell__cloud_shell_button","Search__enable_dynamic_content_confidential_banner","Profiles__enable_profile_collections","MiscFeatureFlags__enable_project_variables","TpcFeatures__enable_unmirrored_page_left_nav","Cloud__enable_cloud_shell_fte_user_flow","MiscFeatureFlags__enable_firebase_utm","BookNav__enable_tenant_cache_key","DevPro__enable_cloud_innovators_plus","Profiles__enable_recognition_badges","Search__enable_ai_search_summaries_restricted","Profiles__enable_stripe_subscription_management","Cloud__enable_cloud_shell","TpcFeatures__enable_mirror_tenant_redirects","Profiles__enable_dashboard_curated_recommendations","Cloud__enable_free_trial_server_call","Search__enable_suggestions_from_borg","Cloud__enable_cloudx_experiment_ids","MiscFeatureFlags__emergency_css","Experiments__reqs_query_experiments","MiscFeatureFlags__developers_footer_dark_image","Profiles__enable_page_saving","Search__enable_ai_eligibility_checks","Profiles__enable_completequiz_endpoint","Profiles__enable_developer_profiles_callout","Profiles__enable_release_notes_notifications","Search__enable_ai_search_summaries","MiscFeatureFlags__enable_explain_this_code","EngEduTelemetry__enable_engedu_telemetry","Search__enable_page_map","Concierge__enable_concierge","Profiles__enable_public_developer_profiles","Concierge__enable_key_takeaways","Cloud__enable_cloud_dlp_service","Concierge__enable_pushui"],null,null,"AIzaSyBLEMok-5suZ67qRPzx0qUtbnLmyT_kCVE","https://developerscontentserving-pa.clients6.google.com","AIzaSyCM4QpTRSqP5qI4Dvjt4OAScIN8sOUlO-k","https://developerscontentsearch-pa.clients6.google.com",1,4,null,"https://developerprofiles-pa.clients6.google.com",[1,"developers","Google for Developers","developers.google.com",null,"developers-dot-devsite-v2-prod.appspot.com",null,null,[1,1,[1],null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],[1,null,null,[1,20],"/recommendations/information"],null,null,null,[1,1,1],[1,1,null,1,1]],null,[null,null,null,null,null,null,"/images/lockup-new.svg","/images/touchicon-180-new.png",null,null,null,null,1,null,null,null,null,null,null,null,null,1,null,null,null,"/images/lockup-dark-theme-new.svg",[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[6,1,14,15,20,22,23,29,32,36],null,[[null,null,null,[3,7,10,2,39,17,4,32,24,11,12,13,34,15,25],null,null,[1,[["docType","Choose a content type",[["Tutorial",null,null,null,null,null,null,null,null,"Tutorial"],["Guide",null,null,null,null,null,null,null,null,"Guide"],["Sample",null,null,null,null,null,null,null,null,"Sample"]]],["product","Choose a product",[["Android",null,null,null,null,null,null,null,null,"Android"],["ARCore",null,null,null,null,null,null,null,null,"ARCore"],["ChromeOS",null,null,null,null,null,null,null,null,"ChromeOS"],["Firebase",null,null,null,null,null,null,null,null,"Firebase"],["Flutter",null,null,null,null,null,null,null,null,"Flutter"],["Assistant",null,null,null,null,null,null,null,null,"Google Assistant"],["GoogleCloud",null,null,null,null,null,null,null,null,"Google Cloud"],["GoogleMapsPlatform",null,null,null,null,null,null,null,null,"Google Maps Platform"],["GooglePay",null,null,null,null,null,null,null,null,"Google Pay & Google Wallet"],["GooglePlay",null,null,null,null,null,null,null,null,"Google Play"],["Tensorflow",null,null,null,null,null,null,null,null,"TensorFlow"]]],["category","Choose a topic",[["AiAndMachineLearning",null,null,null,null,null,null,null,null,"AI and Machine Learning"],["Data",null,null,null,null,null,null,null,null,"Data"],["Enterprise",null,null,null,null,null,null,null,null,"Enterprise"],["Gaming",null,null,null,null,null,null,null,null,"Gaming"],["Mobile",null,null,null,null,null,null,null,null,"Mobile"],["Web",null,null,null,null,null,null,null,null,"Web"]]]]]],[1,1],null,1],[[["UA-24532603-1"],["UA-22084204-5"],null,null,["UA-24532603-5"],null,null,[["G-272J68FCRF"],null,null,[["G-272J68FCRF",2]]],[["UA-24532603-1",2]],null,[["UA-24532603-5",2]],null,1],[[1,1],[3,2],[11,8],[6,5],[5,4],[14,11],[12,9],[4,3],[15,12],[13,10],[16,13]],[[1,1],[2,2]]],null,4,null,null,null,null,null,null,null,null,null,null,null,null,null,"developers.devsite.google"],null,"pk_live_5170syrHvgGVmSx9sBrnWtA5luvk9BwnVcvIi7HizpwauFG96WedXsuXh790rtij9AmGllqPtMLfhe2RSwD6Pn38V00uBCydV4m",1]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>