blob: 95238a7090ce05159444abdf3b238b37c9388b56 [file] [log] [blame] [view]
# Token Manager
## Overview
Token Manager defines a common implementation of the auth.account.TokenManager
FIDL protocol and underlying database that may be used by both Token Manager
Factory and Account Handler.
Clients of this library must supply the path to use for the credential database
and an implementations of the `AuthProviderSupplier` trait that can supply
AuthProvider channels given an auth_provider_type. Each request to Token Manager
must also be associated with a `TokenManagerContext`.
## Key Dependencies
* */identity/lib/token_store* - Token Manager uses this crate to implement the
database of long-lived credentials such as OAuth refresh tokens
* */identity/lib/token_cache* - Token Manager uses this crate to implement a
cache of short-lived credentials such as OAuth access tokens
* *Auth Providers* - Token Manager communicates with components that implement
the fuchsia.auth.AuthProvider FIDL protocol to establish and exchange
credentials
## Design
`lib.rs` defines important types that clients of the library must supply:
* The `TokenManagerContext` struct defines the context that a particular request
to the token manager was received in. This contains the url of the component
using the TokenManager channel, and the client end of a
fuchsia.context.AuthenticationContextProvider channel.
* The `AuthProviderSupplier` trait supplies the client end of a
fuchsia.auth.AuthProvider channel given a particular `auth_provider_type`
`TokenManager` implements the fuchsia.auth.TokenManager FIDL protocol and may
be instantiated by clients of the library.
`TokenManagerError` defines an Error type implementing failure::Fail and
containing the most appropriate fuchsia.auth.Status to communicate the error
over FIDL.
## Future Work
Currently requests from different components are not isolated, i.e. the
TokenManagerContext is ignored. In the future it is likely that some isolation
will be introduced so that unrelated components from different vendors cannot
directly access each other's tokens. However, additional design work is required
to retain sharing in certain cases (e.g. between components from the same vendor
or between different vendors given explicit user consent).
The protocol between Token Manager and Auth Providers will be redesigned to
better enable additional authentication token types in the future.