Struct graph_oauth::oauth::OAuth
source · [−]pub struct OAuth { /* private fields */ }
Expand description
OAuth
OAuth client implementing the OAuth 2.0 and OpenID Connect protocols on Microsoft identity platform. This version is specifically meant for the Graph V1.0 and Beta API.
The client supports almost all OAuth 2.0 flows that Microsoft implements as well as the token and code flow specific to the OneDrive api.
The OAuth client is strict on what can be used for a specific OAuth flow. This is to ensure that the credentials used in requests include only information that is required or optional for that specific grant and not any other. Even if you accidently pass a value, such as a nonce, for a grant type that does not use it, any request that is made will not include the nonce regardless.
Disclaimer
Using this API for other resource owners besides Microsoft may work but functionality will more then likely be limited.
Example
use graph_oauth::oauth::OAuth;
let oauth = OAuth::new();
Implementations
Create a new OAuth instance.
Example
use graph_oauth::oauth::{OAuth, GrantType};
let mut oauth = OAuth::new();
Insert oauth credentials using the OAuthCredential enum. This method is used internally for each of the setter methods. Callers can optionally use this method to set credentials instead of the individual setter methods.
Example
oauth.insert(OAuthCredential::AuthorizeURL, "https://example.com");
assert!(oauth.contains(OAuthCredential::AuthorizeURL));
println!("{:#?}", oauth.get(OAuthCredential::AuthorizeURL));
Insert and OAuth credential using the entry trait and
returning the credential. This internally calls
entry.(OAuthCredential).or_insret_with(value)
.
Example
let entry = oauth.entry(OAuthCredential::AuthorizeURL, "https://example.com");
assert_eq!(entry, "https://example.com")
Check if an OAuth credential has already been set.
Example
println!("{:#?}", oauth.contains(OAuthCredential::Nonce));
Remove a field from OAuth.
Example
oauth.client_id("client_id");
assert_eq!(oauth.contains(OAuthCredential::ClientId), true);
oauth.remove(OAuthCredential::ClientId);
assert_eq!(oauth.contains(OAuthCredential::ClientId), false);
Set the access token url of a request for OAuth
Example
oauth.access_token_url("https://example.com/token");
Set the refresh token url of a request for OAuth
Example
oauth.refresh_token_url("https://example.com/token");
Set id token for open id.
Example
oauth.id_token(IdToken::new("1345", "code", "state", "session_state"));
Generate a code challenge and code verifier for the authorization code grant flow using proof key for code exchange (PKCE) and SHA256.
This method automatically sets the code_verifier, code_challenge, and code_challenge_method fields.
For authorization, the code_challenge_method parameter in the request body is automatically set to ‘S256’.
Internally this method uses the Rust ring cyrpto library to generate a secure random 32-octet sequence that is base64 URL encoded (no padding). This sequence is hashed using SHA256 and base64 URL encoded (no padding) resulting in a 43-octet URL safe string.
For more info on PKCE and entropy see: https://tools.ietf.org/html/rfc7636#section-7.1
Example
let mut oauth = OAuth::new();
oauth.generate_sha256_challenge_and_verifier();
println!("Code Challenge: {:#?}", oauth.get(OAuthCredential::CodeChallenge));
println!("Code Verifier: {:#?}", oauth.get(OAuthCredential::CodeVerifier));
println!("Code Challenge Method: {:#?}", oauth.get(OAuthCredential::CodeChallengeMethod));
Set the url to send a post request that will log out the user.
Example
oauth.logout_url("https://example.com/logout?");
Set the redirect uri that user will be redirected to after logging out.
Example
oauth.post_logout_redirect_uri("http://localhost:8080");
Set the redirect uri that user will be redirected to after logging out.
Example
oauth.username("user");
assert!(oauth.contains(OAuthCredential::Username))
Set the redirect uri that user will be redirected to after logging out.
Example
oauth.password("user");
assert!(oauth.contains(OAuthCredential::Password))
Add a scope’ for the OAuth URL.
Example
oauth.add_scope("Sites.Read")
.add_scope("Sites.ReadWrite")
.add_scope("Sites.ReadWrite.All");
assert_eq!(oauth.join_scopes(" "), "Sites.Read Sites.ReadWrite Sites.ReadWrite.All");
Get the scopes.
Example
let mut oauth = OAuth::new();
oauth.add_scope("Files.Read");
oauth.add_scope("Files.ReadWrite");
let scopes = oauth.get_scopes();
assert!(scopes.contains("Files.Read"));
assert!(scopes.contains("Files.ReadWrite"));
Join scopes.
Example
// the scopes take a separator just like Vec join.
let s = oauth.join_scopes(" ");
println!("{:#?}", s);
pub fn extend_scopes<T: ToString, I: IntoIterator<Item = T>>(
&mut self,
iter: I
) -> &mut Self
pub fn extend_scopes<T: ToString, I: IntoIterator<Item = T>>(
&mut self,
iter: I
) -> &mut Self
Extend scopes.
Example
let scopes1 = vec!["Files.Read", "Files.ReadWrite"];
oauth.extend_scopes(&scopes1);
assert_eq!(oauth.join_scopes(" "), "Files.Read Files.ReadWrite");
Check if OAuth contains a specific scope.
Example
oauth.add_scope("Files.Read");
assert_eq!(oauth.contains_scope("Files.Read"), true);
// Or using static scopes
oauth.add_scope("File.ReadWrite");
assert!(oauth.contains_scope("File.ReadWrite"));
Remove all scopes.
Example
oauth.add_scope("Files.Read").add_scope("Files.ReadWrite");
assert_eq!("Files.Read Files.ReadWrite", oauth.join_scopes(" "));
oauth.clear_scopes();
assert!(oauth.get_scopes().is_empty());
Set the access token.
Example
use graph_oauth::oauth::OAuth;
use graph_oauth::oauth::AccessToken;
let mut oauth = OAuth::new();
let access_token = AccessToken::default();
oauth.access_token(access_token);
Get the access token.
Example
let access_token = oauth.get_access_token().unwrap();
println!("{:#?}", access_token);
Get the refrsh token. This method returns the current refresh token stored in OAuth and does not make a request for a refresh token.
Example
let mut access_token = AccessToken::default();
access_token.set_refresh_token("refresh_token");
oauth.access_token(access_token);
let refresh_token = oauth.get_refresh_token().unwrap();
println!("{:#?}", refresh_token);
Sign the user out using the OneDrive v1.0 endpoint.
Example
use graph_oauth::oauth::OAuth;
let mut oauth = OAuth::new();
oauth.v1_logout().unwrap();
pub fn params(
&mut self,
pairs: Vec<OAuthCredential>
) -> Result<HashMap<String, String>, GraphFailure>
pub fn encode_uri(
&mut self,
grant: GrantType,
request_type: GrantRequest
) -> Result<String, GraphFailure>
Trait Implementations
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>,
Deserialize this value from the given Serde deserializer. Read more
Extend the OAuth credentials.
Example
let mut map: HashMap<OAuthCredential, &str> = HashMap::new();
map.insert(OAuthCredential::ClientId, "client_id");
map.insert(OAuthCredential::ClientSecret, "client_secret");
oauth.extend(map);
Extends a collection with the contents of an iterator. Read more
extend_one
)Extends a collection with exactly one element.
extend_one
)Reserves capacity in a collection for the given number of additional elements. Read more
Auto Trait Implementations
impl RefUnwindSafe for OAuth
impl UnwindSafe for OAuth
Blanket Implementations
Mutably borrows from an owned value. Read more
Compare self to key
and return true
if they are equal.
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more