From fe6c38d07a278603296dce1f8451087a31fccc6b Mon Sep 17 00:00:00 2001 From: Michael Husiev Date: Fri, 3 May 2024 21:01:58 +0100 Subject: [PATCH 1/6] update AzureADOAuth2 user_data --- social_core/backends/azuread.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/social_core/backends/azuread.py b/social_core/backends/azuread.py index 837d2c54..f6455501 100644 --- a/social_core/backends/azuread.py +++ b/social_core/backends/azuread.py @@ -98,17 +98,20 @@ def get_user_details(self, response): } def user_data(self, access_token, *args, **kwargs): - response = kwargs.get("response") - if response and response.get("id_token"): - id_token = response.get("id_token") - else: - id_token = access_token - - try: - decoded_id_token = jwt.decode(id_token, options={"verify_signature": False}) - except (jwt.DecodeError, jwt.ExpiredSignatureError) as de: - raise AuthTokenError(self, de) - return decoded_id_token + """Return user data by querying Microsoft service""" + data = self.get_json( + "https://graph.microsoft.com/v1.0/me", + headers={"Authorization": "Bearer " + access_token}, + ) + + data_aliases = { + "email": data.get("mail", ""), + "first_name": data.get("givenName", ""), + "last_name": data.get("surname", ""), + } + + data.update(data_aliases) + return data def auth_extra_arguments(self): """Return extra arguments needed on auth process. The defaults can be From 41c556cffba584d61f7742431cc20038a9f69a00 Mon Sep 17 00:00:00 2001 From: Michael Husiev Date: Fri, 3 May 2024 21:02:12 +0100 Subject: [PATCH 2/6] update MicrosoftOAuth2 user_data --- social_core/backends/microsoft.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/social_core/backends/microsoft.py b/social_core/backends/microsoft.py index 7817230b..9ea75dda 100644 --- a/social_core/backends/microsoft.py +++ b/social_core/backends/microsoft.py @@ -59,16 +59,20 @@ def get_user_details(self, response): def user_data(self, access_token, *args, **kwargs): """Return user data by querying Microsoft service""" - return self.get_json( + data = self.get_json( "https://graph.microsoft.com/v1.0/me", - headers={ - "Content-Type": "application/x-www-form-urlencoded", - "Accept": "application/json", - "Authorization": "Bearer " + access_token, - }, - method="GET", + headers={"Authorization": "Bearer " + access_token}, ) + data_aliases = { + "email": data.get("mail", ""), + "first_name": data.get("givenName", ""), + "last_name": data.get("surname", ""), + } + + data.update(data_aliases) + return data + def refresh_token_params(self, token, *args, **kwargs): return { "client_id": self.setting("KEY"), From 64b0317b647419111da6ccf0f6c5828f56a89604 Mon Sep 17 00:00:00 2001 From: Michael Husiev Date: Fri, 3 May 2024 21:19:05 +0100 Subject: [PATCH 3/6] cleanup --- social_core/backends/azuread.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/social_core/backends/azuread.py b/social_core/backends/azuread.py index f6455501..19eaac95 100644 --- a/social_core/backends/azuread.py +++ b/social_core/backends/azuread.py @@ -1,7 +1,5 @@ import time -import jwt - from ..exceptions import AuthTokenError from .oauth import BaseOAuth2 From 359d0fe9cdcf760397889f4f453c6d854fc6bd34 Mon Sep 17 00:00:00 2001 From: Michael Husiev Date: Fri, 3 May 2024 21:22:26 +0100 Subject: [PATCH 4/6] cleanup --- social_core/backends/azuread.py | 1 - 1 file changed, 1 deletion(-) diff --git a/social_core/backends/azuread.py b/social_core/backends/azuread.py index 19eaac95..c1bed043 100644 --- a/social_core/backends/azuread.py +++ b/social_core/backends/azuread.py @@ -1,6 +1,5 @@ import time -from ..exceptions import AuthTokenError from .oauth import BaseOAuth2 """ From 9173e28a79b19da9cfb0459cf8c6c2c28b1b5f46 Mon Sep 17 00:00:00 2001 From: Michael Husiev Date: Fri, 3 May 2024 21:27:05 +0100 Subject: [PATCH 5/6] rollback MicrosoftOAuth2 --- social_core/backends/microsoft.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/social_core/backends/microsoft.py b/social_core/backends/microsoft.py index 9ea75dda..7817230b 100644 --- a/social_core/backends/microsoft.py +++ b/social_core/backends/microsoft.py @@ -59,20 +59,16 @@ def get_user_details(self, response): def user_data(self, access_token, *args, **kwargs): """Return user data by querying Microsoft service""" - data = self.get_json( + return self.get_json( "https://graph.microsoft.com/v1.0/me", - headers={"Authorization": "Bearer " + access_token}, + headers={ + "Content-Type": "application/x-www-form-urlencoded", + "Accept": "application/json", + "Authorization": "Bearer " + access_token, + }, + method="GET", ) - data_aliases = { - "email": data.get("mail", ""), - "first_name": data.get("givenName", ""), - "last_name": data.get("surname", ""), - } - - data.update(data_aliases) - return data - def refresh_token_params(self, token, *args, **kwargs): return { "client_id": self.setting("KEY"), From 4b7f0942d8901a4d8a3bd1c2e44fda132c9de634 Mon Sep 17 00:00:00 2001 From: Michael Husiev Date: Fri, 3 May 2024 21:32:17 +0100 Subject: [PATCH 6/6] fix AzureADOAuth2 --- social_core/backends/azuread.py | 43 ++++++++++++++++----------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/social_core/backends/azuread.py b/social_core/backends/azuread.py index c1bed043..6a6aea85 100644 --- a/social_core/backends/azuread.py +++ b/social_core/backends/azuread.py @@ -80,36 +80,35 @@ def get_user_id(self, details, response): return response.get("upn") def get_user_details(self, response): - """Return user details from Azure AD account""" - fullname, first_name, last_name = ( - response.get("name", ""), - response.get("given_name", ""), - response.get("family_name", ""), - ) + """Return user details from Microsoft online account""" + email = response.get("mail") + username = response.get("userPrincipalName") + + if "@" in username: + if not email: + email = username + username = username.split("@", 1)[0] + return { - "username": fullname, - "email": response.get("email", response.get("upn")), - "fullname": fullname, - "first_name": first_name, - "last_name": last_name, + "username": username, + "email": email, + "fullname": response.get("displayName", ""), + "first_name": response.get("givenName", ""), + "last_name": response.get("surname", ""), } def user_data(self, access_token, *args, **kwargs): """Return user data by querying Microsoft service""" - data = self.get_json( + return self.get_json( "https://graph.microsoft.com/v1.0/me", - headers={"Authorization": "Bearer " + access_token}, + headers={ + "Content-Type": "application/x-www-form-urlencoded", + "Accept": "application/json", + "Authorization": "Bearer " + access_token, + }, + method="GET", ) - data_aliases = { - "email": data.get("mail", ""), - "first_name": data.get("givenName", ""), - "last_name": data.get("surname", ""), - } - - data.update(data_aliases) - return data - def auth_extra_arguments(self): """Return extra arguments needed on auth process. The defaults can be overridden by GET parameters."""