#oauth2 #surf #async-std

oauth2-surf

HTTP client adapter for oauth2 crate using the surf HTTP client

3 releases

0.1.2 Jul 4, 2021
0.1.1 Dec 18, 2020
0.1.0 Dec 17, 2020

#636 in Authentication

MIT license

7KB
53 lines

oauth2-surf

HTTP Client adapter for oauth2 crate using the Surf HTTP client

Documentation is available on docs.rs


lib.rs:

HTTP client adapter for oauth2 using the surf HTTP client

Usage

Just import the http_client function from this library and pass it into the request_async function when exchanging tokens. (Example taken from oauth2 docs)

 use anyhow;
 use oauth2::{
     AuthorizationCode,
     AuthUrl,
     ClientId,
     ClientSecret,
     CsrfToken,
     PkceCodeChallenge,
     RedirectUrl,
     Scope,
     TokenResponse,
     TokenUrl
 };
 use oauth2::basic::BasicClient;
 use oauth2_surf::http_client;
 use url::Url;

 // Create an OAuth2 client by specifying the client ID, client secret, authorization URL and
 // token URL.
 let client =
     BasicClient::new(
         ClientId::new("client_id".to_string()),
         Some(ClientSecret::new("client_secret".to_string())),
         AuthUrl::new("http://authorize".to_string())?,
         Some(TokenUrl::new("http://token".to_string())?)
     )
     // Set the URL the user will be redirected to after the authorization process.
     .set_redirect_url(RedirectUrl::new("http://redirect".to_string())?);

 // Generate a PKCE challenge.
 let (pkce_challenge, pkce_verifier) = PkceCodeChallenge::new_random_sha256();

 // Generate the full authorization URL.
 let (auth_url, csrf_token) = client
     .authorize_url(CsrfToken::new_random)
     // Set the desired scopes.
     .add_scope(Scope::new("read".to_string()))
     .add_scope(Scope::new("write".to_string()))
     // Set the PKCE code challenge.
     .set_pkce_challenge(pkce_challenge)
     .url();

 // This is the URL you should redirect the user to, in order to trigger the authorization
 // process.
 println!("Browse to: {}", auth_url);

 // Once the user has been redirected to the redirect URL, you'll have access to the
 // authorization code. For security reasons, your code should verify that the `state`
 // parameter returned by the server matches `csrf_state`.

 // Now you can trade it for an access token.
 let token_result = client
     .exchange_code(AuthorizationCode::new("some authorization code".to_string()))
     // Set the PKCE code verifier.
     .set_pkce_verifier(pkce_verifier)
     .request_async(http_client)
     .await?;

 // Unwrapping token_result will either produce a Token or a RequestTokenError.

Dependencies

~10–19MB
~245K SLoC