minecraft-msa-auth
This crate allows you to authenticate into Minecraft online services using a Microsoft Oauth2 token. You can integrate it with oauth2-rs and build interactive authentication flows.
Example
const DEVICE_CODE_URL: &str = "https://login.microsoftonline.com/consumers/oauth2/v2.0/devicecode";
const MSA_AUTHORIZE_URL: &str = "https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize";
const MSA_TOKEN_URL: &str = "https://login.microsoftonline.com/common/oauth2/v2.0/token";
let client = new
.set_auth_uri
.set_token_uri
.set_device_authorization_url;
let oauth_http_client = new;
let details: StandardDeviceAuthorizationResponse = client
.exchange_device_code
.add_scope
.request_async
.await?;
println!;
let token = client
.exchange_device_access_token
.request_async
.await?;
println!;
let mc_flow = new;
let mc_token = mc_flow.exchange_microsoft_token.await?;
println!;
See full examples in the examples folder.
HTTP clients
By default the crate is asynchronous and uses reqwest to perform the authentication requests. Two cargo features change that:
ureqprovidesUreqClient, a synchronous client backed by ureq.is_syncturns the whole API synchronous via maybe-async: the flow methods lose theirasyncand the reqwest implementation switches toreqwest::blocking::Client.
For a small launcher that does not want an async runtime:
[]
= { = "0.5", = false, = ["ureq", "is_sync"] }
let mc_flow = new;
let mc_token = mc_flow.exchange_microsoft_token?;
To use any other HTTP client, disable the default reqwest feature and implement the HttpClient trait for your client of choice:
[]
= { = "0.5", = false }
What's new in 0.5
Version 0.5 removes the hard dependency on reqwest. MinecraftAuthorizationFlow is generic over an HttpClient trait, with implementations included for reqwest (the default), reqwest::blocking and ureq, and a new is_sync feature makes the whole API synchronous for launchers without an async runtime. Two changes break existing code: MinecraftAuthorizationError is now generic over the client's error type, and its Reqwest variant was replaced by Http, HttpStatus and Json. Code using the default reqwest client only needs to update its error handling. See the changelog for the full list.
License
Except where noted (below and/or in individual files), all code in this repository is dual-licensed under either:
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)