Skip to content

Commit

Permalink
Add Microsoft device code example with tenant ID (#222)
Browse files Browse the repository at this point in the history
To make it more understandable for Microsoft Azure endpoint users,
an endpoint with tenant is added and edited the existing
example as common user.
  • Loading branch information
LorenzoLeonardo authored Jun 15, 2023
1 parent 49d8798 commit 5f4c288
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
File renamed without changes.
51 changes: 51 additions & 0 deletions examples/microsoft_devicecode_tenant_user.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
use oauth2::basic::BasicClient;
use oauth2::devicecode::StandardDeviceAuthorizationResponse;
use oauth2::reqwest::async_http_client;
use oauth2::{AuthUrl, ClientId, DeviceAuthorizationUrl, Scope, TokenUrl};
use std::error::Error;

// Reference: https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-device-code
// Please use your tenant id when using this example
const TENANT_ID: &str = "{tenant}";

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let device_auth_url = DeviceAuthorizationUrl::new(format!(
"https://login.microsoftonline.com/{}/oauth2/v2.0/devicecode",
TENANT_ID
))?;
let client = BasicClient::new(
ClientId::new("client_id".to_string()),
None,
AuthUrl::new(format!(
"https://login.microsoftonline.com/{}/oauth2/v2.0/authorize",
TENANT_ID
))?,
Some(TokenUrl::new(format!(
"https://login.microsoftonline.com/{}/oauth2/v2.0/token",
TENANT_ID
))?),
)
.set_device_authorization_url(device_auth_url);

let details: StandardDeviceAuthorizationResponse = client
.exchange_device_code()?
.add_scope(Scope::new("read".to_string()))
.request_async(async_http_client)
.await?;

eprintln!(
"Open this URL in your browser:\n{}\nand enter the code: {}",
details.verification_uri().to_string(),
details.user_code().secret().to_string()
);

let token_result = client
.exchange_device_access_token(&details)
.request_async(async_http_client, tokio::time::sleep, None)
.await;

eprintln!("Token:{:?}", token_result);

Ok(())
}

0 comments on commit 5f4c288

Please sign in to comment.