diff --git a/examples/microsoft_devicecode.rs b/examples/microsoft_devicecode_common_user.rs similarity index 100% rename from examples/microsoft_devicecode.rs rename to examples/microsoft_devicecode_common_user.rs diff --git a/examples/microsoft_devicecode_tenant_user.rs b/examples/microsoft_devicecode_tenant_user.rs new file mode 100644 index 0000000..3aef10e --- /dev/null +++ b/examples/microsoft_devicecode_tenant_user.rs @@ -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> { + 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(()) +}