blob: f5ece0f4e0fca523acfb3e0f4333ed110158c1d7 [file] [log] [blame] [view]
# Identity Service User Manual
The Identity Service maintains and provides access to the user's signed-in
identities with Google.
This service is currently in development. The design doc is here:
https://docs.google.com/document/d/1EPLEJTZewjiShBemNP5Zyk3b_9sgdbrZlXn7j1fubW0
The tracking bug is https://crbug.com/654990.
Below, we provide a user manual to performing various tasks via the Identity
Service, comparing to how you would have performed these tasks via the relevant
interfaces from //google_apis/gaia and //components/signin.
## Connecting to the Identity Manager
The primary interface exposed by the Identity Service is the Identity Manager.
Here is an [example CL](https://chromium-review.googlesource.com/c/539637/)
illustrating connection to the Identity Manager from a client
(specifically, IdentitySigninFlow).
## Obtaining the Information of the Primary Account
There is no way to obtain the information of the primary account synchronously,
i.e., there is no literal equivalent to
PrimaryAccountManager::GetAuthenticatedAccountInfo(). Instead, you should call the
asynchronous method IdentityManager::GetPrimaryAccountInfo(). To date, all use
cases of PrimaryAccountManager::GetAuthenticatedAccountInfo() that we have seen have
been part of a larger asynchronous flow (e.g., obtaining an access token in
response to an invocation of the chrome.identity extension API). In these use
cases, you can simply fold the asynchronous obtaining of the authenticated
account info into the larger asynchronous flow.
There is no one way to do this as the "larger asynchronous flow" in question
will be different from case to case, but here are a
[couple](https://chromium-review.googlesource.com/c/536754/)
[example](https://chromium-review.googlesource.com/c/558096/) CLs.
If the above guidance does not suffice for your use case, please contact
blundell@chromium.org.
## Obtaining an Access Token
Where you would have called OAuth2TokenService::StartRequest(), you should
instead call IdentityManager::GetAccessToken(). This interface is a 1:1
correspondence that should transparently work in all use cases, although there
are currently still some input parameters that need to be added to its API to
match esoteric variants of the OAuth2TokenService API. Here is an [example
CL](https://chromium-review.googlesource.com/c/514047/) that illustrates
conversion of a client.
If you were using or looking to use MintOAuth2TokenFlow, please contact
blundell@chromium.org. There is currently no corresponding interface in the
Identity Service, and we are looking to understand whether/how it is necessary
to work this class into the Identity Service interface.
## Being Notified on Signin of the Primary Account
If you were previously listening to PrimaryAccountManager::GoogleSigninSucceeded()
or OAuth2TokenService::OnRefreshTokenIsAvailable() to determine when the primary
account is available, you should call
IdentityManager::GetPrimaryAccountWhenAvailable(). This method will fire when
the authenticated account is signed in, has a refresh token available, and the
refresh token is not in an error state. This method can be used in the context
where the user is not yet signed in, as well as in the context where the user is
signed in but in an auth error state, and the client wants to kick off a
re-authentication flow and get notified when the re-authentication is complete
and the user is no long in an auth error state. Here is an [example
CL](https://chromium-review.googlesource.com/c/539637/) illustrating this
pattern.
## Determining if an Account Has a Refresh Token Available
There is no way to determine this information synchronously, i.e., there is no
literal equivalent to OAuth2TokenService::IsRefreshTokenAvailable(). To date,
all use cases of this method that we have seen have been part of a larger
asynchronous flow (e.g., determining whether the user needs to sign in before we
can obtain an access token in response to an invocation of the chrome.identity
extension API). In these use cases, you can simply call
IdentityManager::GetPrimaryAccountInfo() and check the AccountState that is
returned from that call, folding the asynchronous checking into the larger
asynchronous flow. Here is an [example
CL](https://chromium-review.googlesource.com/c/538672/) illustrating this
pattern.
If the above guidance does not suffice for your use case, please contact
blundell@chromium.org.
## Being Notified When An Account Has a Refresh Token Available
All of the use cases of OAuth2TokenService::OnRefreshTokenAvailable() that we
have seen to date have been for the purpose of knowing when the authenticated
account is available (i.e., signed in with a refresh token available). For this
purpose, you should call IdentityManager::GetPrimaryAccountWhenAvailable(). Here
is an [example CL](https://chromium-review.googlesource.com/c/539637/) illustrating the conversion.
If the above guidance does not suffice for your use case, please contact
blundell@chromium.org.
## Observing Signin-Related Events
There are plans to build a unified Observer interface that will supersede the
various current Observer interfaces (AccountTracker, OAuth2TokenService,
PrimaryAccountManager, AccountTrackerService). However, this functionality has
not yet been built. Contact blundell@chromium.org with your use case, which can
help drive the bringup of this interface.
## Other Needs
If you have any need that is not covered by the above guidance, contact
blundell@chromium.org.