Account Not Found. Verify That the Email Address Is the One Used on Your Account and Try Again.
The OAuth-based Google Sign-in "Streamlined" linking type adds Google Sign-In on peak of OAuth-based account linking. This provides seamless vocalism-based linking for Google users while as well enabling account linking for users who registered to your service with a non-Google identity.
This linking type begins with Google Sign-In, which allows you lot to check if the user'southward Google profile data exists in your organisation. If the user'due south information isn't institute in your system, a standard OAuth flow begins. The user can besides cull to create a new account with their Google profile information.
To perform business relationship linking with the Streamlined linking type, follow these general steps:
- First, ask the user to give consent to access their Google contour.
- Utilize the information in their profile to place the user.
- If you can't find a lucifer for the Google user in your authentication system, the period proceeds depending on whether yous configured your Deportment project in the Deportment panel to allow user business relationship creation via voice or only on your website.
- If you permit account creation via phonation, validate the ID token received from Google. You lot can then create a user based on the profile information contained in the ID token.
- If you don't allow account creation via voice, the user is transferred to a browser where they can load your authorization page and consummate the user creation flow.
Support business relationship creation via voice
If yous let user account creation via voice, Assistant asks the user whether they want to do the following:
- Create a new account on your system using their Google account information, or
- Sign in to your authentication organisation with a different account if they have an existing non-Google account.
Allowing account creation via voice is recommended if you want to minimize the friction of the account creation menstruum. The user only needs to leave the voice period if they want to sign in using an existing non-Google account.
Disallow account creation via voice
If you disallowed user account creation via voice, Assistant opens the URL to the web site that y'all provided for user authentication. If the interaction is happening on a device that doesn't have a screen, Assistant directs the user to a telephone to continue the account linking flow.
Disallowing cosmos is recommended if:
-
You do not want to let users that have not-Google accounts to create a new user account and want them to link to their existing user accounts in your hallmark system instead. For instance, if you offer a loyalty plan, you might want to make sure that the user doesn't lose the points accrued on their existing account.
-
Yous need to take total command of the business relationship creation menstruum. For example, y'all could disallow cosmos if you lot demand to bear witness your terms of service to the user during account creation.
Implement OAuth-based Google Sign-in "Streamlined" linking
Accounts are linked with manufacture standard OAuth 2.0 flows. Deportment on Google supports the implicit and dominance code flows.
In the implicit lawmaking flow, Google opens your authorisation endpoint in the user's browser. After successful sign in, you return a long-lived access token to Google. This access token is now included in every request sent from the Assistant to your Activity.
In the dominance code menses, y'all need two endpoints:
- The authorization endpoint, which is responsible for presenting the sign-in UI to your users that aren't already signed in and recording consent to the requested access in the form of a short-lived authorization code.
- The token substitution endpoint, which is responsible for two types of exchanges:
- Exchanges an authorization lawmaking for a long-lived refresh token and a curt-lived access token. This exchange happens when the user goes through the account linking menstruum.
- Exchanges a long-lived refresh token for a brusque-lived admission token. This exchange happens when Google needs a new access token considering the ane information technology had expired.
Although the implicit lawmaking menstruum is simpler to implement, Google recommends that access tokens issued using the implicit menstruation never expire, considering using token expiration with the implicit flow forces the user to link their account once more. If you demand token expiration for security reasons, you lot should strongly consider using the auth code flow instead.
Configure the project
To configure your project to use Streamlined linking, follow these steps:
- Open up the Actions panel and select the project you desire to use.
- Click on the Develop tab and choose Account linking.
- Enable the switch next to Account linking.
- In the Account cosmos department, select Yes.
-
In Linking type, select OAuth & Google Sign In and Implicit.
-
In Client Information, do the following:
- Assign a value to Client ID issued by your Actions to Google to identify requests coming from Google.
- Insert the URLs for your Authorisation and Token Exchange endpoints.
-
Click Salvage.
Implement your OAuth server
To support the OAuth 2.0 implicit menstruum, your service makes an potency endpoint available past HTTPS. This endpoint is responsible for authenticating and obtaining consent from users for data access. The authorization endpoint presents a sign-in UI to your users that aren't already signed in and records consent to the requested access.
When your Action needs to phone call one of your service's authorized APIs, Google uses this endpoint to become permission from your users to call these APIs on their behalf.
A typical OAuth 2.0 implicit flow session initiated past Google has the following menses:
- Google opens your authorization endpoint in the user's browser. The user signs in if non signed in already, and grants Google permission to access their data with your API if they haven't already granted permission.
- Your service creates an access token and returns it to Google past redirecting the user's browser back to Google with the access token fastened to the request.
- Google calls your service'southward APIs, and attaches the admission token with each request. Your service verifies that the access token grants Google authorisation to access the API and then completes the API call.
When your Activity needs to perform account linking via an OAuth 2.0 implicit flow, Google sends the user to your dominance endpoint with a request that includes the following parameters:
Authorization endpoint parameters | |
---|---|
client_id | The client ID you assigned to Google. |
redirect_uri | The URL to which you lot send the response to this asking. |
state | A accounting value that is passed back to Google unchanged in the redirect URI. |
response_type | The type of value to return in the response. For the OAuth two.0 implicit flow, the response blazon is always token . |
For example, if your say-so endpoint is available at https://myservice.example.com/auth
, a asking might look like:
GET https://myservice.instance.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token
For your dominance endpoint to handle sign-in requests, do the post-obit steps:
-
Verify the
client_id
andredirect_uri
values to forbid granting access to unintended or misconfigured client apps:- Ostend that the
client_id
matches the client ID you assigned to Google. - Confirm that the URL specified by the
redirect_uri
parameter has the post-obit form:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
YOUR_PROJECT_ID is the ID found on the Projection settings page of the Deportment Console.
- Ostend that the
-
Check if the user is signed in to your service. If the user isn't signed in, consummate your service's sign-in or sign-up menses.
-
Generate an access token that Google will use to access your API. The access token can be any cord value, just it must uniquely stand for the user and the client the token is for and must non exist guessable.
-
Transport an HTTP response that redirects the user's browser to the URL specified by the
redirect_uri
parameter. Include all of the post-obit parameters in the URL fragment:-
access_token
: the access token y'all just generated -
token_type
: the stringbearer
-
state
: the unmodified land value from the original request The post-obit is an example of the resulting URL:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING
-
Google's OAuth 2.0 redirect handler volition receive the access token and confirm that the state
value hasn't changed. After Google has obtained an access token for your service, Google will attach the token to subsequent calls to your Action as role of the AppRequest.
Handle automatic linking
After the user gives your Action consent to access their Google contour, Google sends a request that contains a signed assertion of the Google user's identity. The assertion contains information that includes the user's Google Account ID, name, and email address. The token exchange endpoint configured for your projection handles that request.
If the corresponding Google account is already present in your authentication system, your token exchange endpoint returns a token for the user. If the Google business relationship doesn't match an existing user, your token substitution endpoint returns a user_not_found
error.
The request has the following form:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Blazon: application/ten-world wide web-form-urlencoded grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&intent=get&exclamation=JWT&consent_code=CONSENT_CODE&scope=SCOPES
Your token exchange endpoint must be able to handle the following parameters:
Token endpoint parameters | |
---|---|
grant_type | The blazon of token being exchanged. For these requests, this parameter has the value urn:ietf:params:oauth:grant-blazon:jwt-bearer . |
intent | For these requests, the value of this parameter is `get`. |
assertion | A JSON Web Token (JWT) that provides a signed assertion of the Google user'southward identity. The JWT contains information that includes the user'due south Google Account ID, name, and electronic mail address. |
consent_code | Optional: When nowadays, a i-time code that indicates that the user has granted consent for your Action to access the specified scopes. |
telescopic | Optional: Any scopes you configured Google to request from users. |
When your token exchange endpoint receives the linking request, it should do the following:
Validate and decode the JWT assertion
You tin validate and decode the JWT assertion by using a JWT-decoding library for your language. Use Google'southward public keys (available in JWK or PEM format) to verify the token's signature.
When decoded, the JWT assertion looks similar the post-obit example:
{ "sub": 1234567890, // The unique ID of the user'southward Google Account "iss": "https://accounts.google.com", // The assertion's issuer "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID "iat": 233366400, // Unix timestamp of the assertion'southward cosmos time "exp": 233370000, // Unix timestamp of the assertion'southward expiration time "name": "Jan Jansen", "given_name": "Jan", "family_name": "Jansen", "electronic mail": "jan@gmail.com", // If present, the user's e-mail address "locale": "en_US" }
In addition to verifying the token's signature, verify that the assertion's issuer (iss
field) is https://accounts.google.com
and that the audience (aud
field) is the client ID assigned to your Action.
Check if the Google business relationship is already present in your authentication organization
Check whether either of the post-obit weather are true:
- The Google Account ID, establish in the assertion'southward
sub
field, is in your user database. - The email address in the assertion matches a user in your user database.
If either condition is true, the user has already signed up and you can issue an access token.
If neither the Google Account ID nor the email address specified in the exclamation matches a user in your database, the user hasn't signed upwardly yet. In this example, your token commutation endpoint should reply with a HTTP 401 fault, that specifies error=user_not_found
, as in the following example:
HTTP/1.i 401 Unauthorized Content-Type: application/json;charset=UTF-8 { "error":"user_not_found", }
When Google receives the 401 fault response with a user_not_found
error, Google calls your token commutation endpoint with the value of the intent
parameter fix to create and sending an ID token that contains the user's contour data with the request.
Handle account cosmos via Google Sign-In
When a user needs to create an account on your service, Google makes a request to your token exchange endpoint that specifies intent=create
, as in the post-obit example:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: awarding/x-www-form-urlencoded response_type=token&grant_type=urn:ietf:params:oauth:grant-blazon:jwt-bearer&scope=SCOPES&intent=create&consent_code=CONSENT_CODE&exclamation=JWT[&NEW_ACCOUNT_INFO]
The assertion
parameter contains A JSON Web Token (JWT) that provides a signed assertion of the Google user's identity. The JWT contains information that includes the user'southward Google Account ID, name, and e-mail address, which you can use to create a new business relationship on your service.
To respond to account creation requests, your token commutation endpoint must exercise the following:
Validate and decode the JWT exclamation
You tin validate and decode the JWT assertion by using a JWT-decoding library for your language. Use Google's public keys (bachelor in JWK or PEM format) to verify the token's signature.
When decoded, the JWT assertion looks similar the post-obit example:
{ "sub": 1234567890, // The unique ID of the user's Google Account "iss": "https://accounts.google.com", // The exclamation's issuer "aud": "123-abc.apps.googleusercontent.com", // Your server'south client ID "iat": 233366400, // Unix timestamp of the assertion'southward creation time "exp": 233370000, // Unix timestamp of the assertion's expiration time "name": "January Jansen", "given_name": "Jan", "family_name": "Jansen", "email": "january@gmail.com", // If present, the user's email address "locale": "en_US" }
In addition to verifying the token's signature, verify that the assertion's issuer (iss
field) is https://accounts.google.com
and that the audience (aud
field) is the client ID assigned to your Activity.
Validate user data and create new account
Check whether either of the following conditions are truthful:
- The Google Account ID, establish in the assertion's
sub
field, is in your user database. - The email address in the assertion matches a user in your user database.
If either status is truthful, prompt the user to link their existing business relationship with their Google Account by responding to the asking with an HTTP 401 fault, specifying error=linking_error
and the user's email address equally the login_hint
, as in the following example:
HTTP/1.1 401 Unauthorized Content-Type: application/json;charset=UTF-8 { "error":"linking_error", "login_hint":"foo@bar.com" }
If neither status is truthful, create a new user account using the data provided in the JWT. New accounts do non typically accept a countersign set. It is recommended that you lot add Google Sign In to other platforms to enable users to log in via Google across the surfaces of your application. Alternatively, you can email the user a link that starts your countersign recovery menstruation to allow the user to ready a countersign for signing in on other platforms.
When the creation is completed, event an access token and return the values in a JSON object in the trunk of your HTTPS response, like in the following case:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
Pattern the vocalisation user interface for the hallmark menstruum
Cheque if the user is verified and start the account linking flow
- Open your Deportment Builder projection in the Actions Console.
- Create a new scene to showtime account linking in your Action:
- Click Scenes.
- Click the add (+) icon to add a new scene.
- In the newly created scene, click the add icon for Atmospheric condition.
- Add a condition that checks if the user associated with the conversation is a a verified user. If the check fails, your Action can't perform account linking during the chat, and should fall back to providing admission to functionality that doesn't crave account linking.
- In the
Enter new expression
field under Condition, enter the following logic:user.verificationStatus != "VERIFIED"
- Under Transition, select a scene that doesn't crave business relationship linking or a scene that is the entry point to guest-just functionality.
- In the
- Click the add icon for Atmospheric condition.
- Add a condition to trigger an account linking flow if the user doesn't have an associated identity.
- In the
Enter new expression
field nether Condition, enter the post-obit logic::user.verificationStatus == "VERIFIED"
- Nether Transition, select the Account Linking arrangement scene.
- Click Save.
- In the
Later on saving, a new account linking arrangement scene called <SceneName>_AccountLinking
is added to your project.
Customize the business relationship linking scene
- Nether Scenes, select the business relationship linking system scene.
- Click Transport prompt and add a short sentence to describe to the user why the Action needs to access their identity (for case "To save your preferences").
- Click Salvage.
- Under Atmospheric condition, click If user successfully completes account linking.
- Configure how the flow should proceed if the user agrees to link their business relationship. For example, phone call the webhook to process any custom business organization logic required and transition back to the originating scene.
- Click Save.
- Nether Conditions, click If user cancels or dismisses account linking.
- Configure how the menstruum should proceed if the user doesn't agree to link their account. For example, send an acknowledging bulletin and redirect to scenes that provide functionality that doesn't require account linking.
- Click Save.
- Under Weather condition, click If organization or network mistake occurs.
- Configure how the menstruum should proceed if the account linking flow can't be completed considering of system or network errors. For example, send an acknowledging message and redirect to scenes that provide functionality that doesn't require business relationship linking.
- Click Save.
Handle data admission requests
If the Assistant request contains an access token, check first that the access token is valid and not expired and then call up from your user account database the user account associated with the token.
crombielegrattlyzed.blogspot.com
Source: https://developers.google.com/assistant/identity/google-sign-in-oauth
0 Response to "Account Not Found. Verify That the Email Address Is the One Used on Your Account and Try Again."
Post a Comment