pub struct AccessToken {
pub access_token: String,
pub expires_in: i128,
pub refresh_token: String,
pub scope: String,
pub token_type: String,
}
Expand description
An opaque (proprietary format) token that conforms to the OAuth 2.0 framework.
They contain authorization information, but not identity information. They are used to authenticate and provide authorization information to Google APIs.
§Examples:
use drive_v3::AccessToken;
use drive_v3::ClientSecrets;
// Load your client_secrets file
let secrets_path = "my_client_secrets.json";
let my_client_secrets = ClientSecrets::from_file(secrets_path)?;
// Request an access token, this will prompt you to authorize via the browser
let scopes = ["https://www.googleapis.com/auth/drive.metadata.readonly"];
let my_access_token = AccessToken::request(&my_client_secrets, &scopes)?;
// After getting your token you can make a request (with reqwest for example) using it for authorization
let client = reqwest::blocking::Client::new();
let body = client.get("google-api-endpoint")
.bearer_auth(&my_access_token.access_token)
.send()?
.text()?;
println!("response: {:?}", body);
Fields§
§access_token: String
The value used for for authentication or authorization.
expires_in: i128
The number of seconds until the token expires.
refresh_token: String
A special token used to request a new token after this one expires or is revoked.
scope: String
The Drive API scopes added to this access token as a string separated by spaces.
token_type: String
Type of the token, an access token should always be of the Bearer type.
Implementations§
Source§impl AccessToken
impl AccessToken
Sourcepub fn is_valid(&self) -> bool
pub fn is_valid(&self) -> bool
Checks if an AccessToken
is valid by making a request to the
tokeninfo
endpoint of the Google Drive API.
§Note
is_valid
will return false if the token has expired or has been revoked, but it will also
return false if the tokeninfo endpoint cannot be reached or if the request returns an error response of any kind.
§Examples:
use drive_v3::ClientSecrets;
let secrets_path = "my_client_secrets.json";
let my_client_secrets = ClientSecrets::from_file(secrets_path)?;
if access_token.is_valid() {
// Do something with your valid token
} else {
access_token.refresh(&my_client_secrets)?;
}
Sourcepub fn has_scopes<T: AsRef<str>>(&self, scopes: &[T]) -> bool
pub fn has_scopes<T: AsRef<str>>(&self, scopes: &[T]) -> bool
Checks if an AccessToken
has all of the specified scopes
.
See Choose scopes documentation, for information on the scopes supported by the Google Drive API.
§Note
has_scopes
does not check if the present scopes
are equal to the specified ones, it
only checks that all specified scopes
are present in the AccessToken
’s scopes.
§Examples
let required_scopes = [
"https://www.googleapis.com/auth/drive.metadata.readonly",
"https://www.googleapis.com/auth/drive.file",
];
assert!( access_token.has_scopes(&required_scopes) );
Sourcepub fn request<T: AsRef<str>>(
client_secrets: &ClientSecrets,
scopes: &[T],
) -> Result<Self>
pub fn request<T: AsRef<str>>( client_secrets: &ClientSecrets, scopes: &[T], ) -> Result<Self>
Requests an AccessToken
with the specified scopes
from the Google Drive API using
OAuth2.
See Choose scopes, for information on the scopes supported by the Google Drive API.
§Examples:
use drive_v3::AccessToken;
use drive_v3::ClientSecrets;
// Load your client_secrets file
let secrets_path = "my_client_secrets.json";
let my_client_secrets = ClientSecrets::from_file(secrets_path)?;
// Request an access token, this will prompt you to authorize via the browser
let scopes = ["https://www.googleapis.com/auth/drive.metadata.readonly"];
let my_access_token = AccessToken::request(&my_client_secrets, &scopes)?;
// After getting your token you can make a request (with reqwest for example) using it for authorization
let client = reqwest::blocking::Client::new();
let body = client.get("google-api-endpoint")
.bearer_auth(&my_access_token.access_token)
.send()?
.text()?;
println!("response: {:?}", body);
§Errors
- a
HexDecoding
orUrlParsing
error, if the creation of thecode verifier
failed. - a
Request
error, if unable to send the request or get a body from the response. - a
Response
error, if the token request returned an error response. - a
Json
error, if unable to parse the response’s body to anAccessToken
. - a
MismatchedScopes
error, if the scopes in the createdAccessToken
are different to thescopes
passed to the function.
Sourcepub fn refresh(&mut self, client_secrets: &ClientSecrets) -> Result<()>
pub fn refresh(&mut self, client_secrets: &ClientSecrets) -> Result<()>
Refreshes an AccessToken
by requesting a new token from
OAuth2 using its
refresh_token
.
§Note
There are limits on the number of refresh tokens that your application will be issued:
- A limit per client/user combination.
- A limit per user across all clients.
It is your responsibility save refreshed tokens in long-term storage and continue to use them for as long as they remain valid. If your application requests too many refresh tokens, it may run into these limits, in which case older refresh tokens will stop working.
§Examples:
use drive_v3::ClientSecrets;
let secrets_path = "my_client_secrets.json";
let my_client_secrets = ClientSecrets::from_file(secrets_path)?;
if !access_token.is_valid() {
access_token.refresh(&my_client_secrets)?;
}
assert!( access_token.is_valid() );
§Errors
Trait Implementations§
Source§impl Clone for AccessToken
impl Clone for AccessToken
Source§fn clone(&self) -> AccessToken
fn clone(&self) -> AccessToken
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for AccessToken
impl Debug for AccessToken
Source§impl<'de> Deserialize<'de> for AccessToken
impl<'de> Deserialize<'de> for AccessToken
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for AccessToken
impl PartialEq for AccessToken
Source§impl Serialize for AccessToken
impl Serialize for AccessToken
impl Eq for AccessToken
impl StructuralPartialEq for AccessToken
Auto Trait Implementations§
impl Freeze for AccessToken
impl RefUnwindSafe for AccessToken
impl Send for AccessToken
impl Sync for AccessToken
impl Unpin for AccessToken
impl UnwindSafe for AccessToken
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.