simple_oauth/common/
microsoft.rs1use crate::{
2 SimpleOAuthProvider, UserInfoProvider,
3 types::{OidcUserInfo, TokenAuthMethod, UserInfo},
4};
5
6#[derive(Debug, Clone)]
7pub struct Microsoft;
8
9impl SimpleOAuthProvider for Microsoft {
10 fn authorize_url(&self) -> &str {
11 "https://login.microsoftonline.com/common/oauth2/v2.0/authorize"
12 }
13
14 fn token_url(&self) -> &str {
15 "https://login.microsoftonline.com/common/oauth2/v2.0/token"
16 }
17
18 fn default_scopes(&self) -> &'static [&'static str] {
19 &["openid", "profile"]
20 }
21
22 fn token_auth_method(&self) -> TokenAuthMethod {
23 TokenAuthMethod::RequestBody
24 }
25}
26
27impl UserInfoProvider for Microsoft {
28 fn user_info_url(&self) -> &str {
29 "https://graph.microsoft.com/oidc/userinfo"
30 }
31
32 fn extract_user_info(&self, val: serde_json::Value) -> Result<UserInfo, serde_json::Error> {
33 let user_info: OidcUserInfo = serde_json::from_value(val)?;
34
35 Ok(UserInfo {
36 id: user_info.sub,
37 name: user_info.name,
38 username: user_info.preferred_username,
39 email: user_info.email,
40 email_verified: user_info.email_verified,
41 avatar_url: user_info.picture,
42 groups: user_info.groups,
43 })
44 }
45}