-
Notifications
You must be signed in to change notification settings - Fork 60
Open
Description
I have set up an application in Azure with credentials.
When I try to log in using said credentials as per the examples, the call fails with a missing key error:
ERROR: KeyError('mail')
Traceback (most recent call last):
File "/whatever/routes/sso_microsoft.py", line 54, in microsoft_callback
user = await microsoft_sso.verify_and_process(request)
File "/usr/local/lib/python3.9/site-packages/fastapi_sso/sso/base.py", line 212, in verify_and_process
return await self.process_login(
File "/usr/local/lib/python3.9/site-packages/fastapi_sso/sso/base.py", line 292, in process_login
return await self.openid_from_response(content)
File "/usr/local/lib/python3.9/site-packages/fastapi_sso/sso/microsoft.py", line 45, in openid_from_response
return OpenID(email=response["mail"], display_name=response["displayName"], provider=cls.provider)
KeyError: 'mail'The code looks like this:
from fastapi import APIRouter, Depends
from fastapi_sso.sso.microsoft import MicrosoftSSO
from starlette.requests import Request
import logging
import os
import pprint
logger = logging.getLogger(__name__)
allow_insecure_http = ("1" == os.environ.get("OAUTHLIB_INSECURE_TRANSPORT", "0"))
# documentation https://pypi.org/project/fastapi-sso/
sso_microsoft_route = APIRouter(
prefix="/sso/microsoft"
, tags = ["sso"]
#,dependencies=[Depends(get_token_header)]
, responses={404: {"description": "Not found"}}
)
MICROSOFT_SSO_DEBUG = os.environ.get("MICROSOFT_SSO_DEBUG")
MICROSOFT_SSO_REDIRECT_URL = os.environ.get("MICROSOFT_SSO_REDIRECT_BASE_URL")
MICROSOFT_SSO_TENANT = os.environ.get("MICROSOFT_SSO_TENANT")
MICROSOFT_SSO_CLIENT_ID = os.environ.get("MICROSOFT_SSO_CLIENT_ID")
MICROSOFT_SSO_CLIENT_SECRET = os.environ.get("MICROSOFT_SSO_CLIENT_SECRET")
if MICROSOFT_SSO_DEBUG:
logger.info(f" MICROSOFT_SSO_REDIRECT_URL: {MICROSOFT_SSO_REDIRECT_URL}")
logger.info(f" MICROSOFT_SSO_TENANT: {MICROSOFT_SSO_TENANT}")
logger.info(f" MICROSOFT_SSO_CLIENT_ID: {MICROSOFT_SSO_CLIENT_ID}")
logger.info(f" MICROSOFT_SSO_CLIENT_SECRET: {MICROSOFT_SSO_CLIENT_SECRET}")
microsoft_sso = MicrosoftSSO(
client_id = MICROSOFT_SSO_CLIENT_ID
, client_secret = MICROSOFT_SSO_CLIENT_SECRET
, tenant = MICROSOFT_SSO_TENANT
, allow_insecure_http = allow_insecure_http
, scope = ["openid"]
)
@sso_microsoft_route.get("/login")
async def microsoft_login(request: Request):
with microsoft_sso:
return await microsoft_sso.get_login_redirect(redirect_uri = request.url_for("microsoft_callback"))
@sso_microsoft_route.get("/callback")
async def microsoft_callback(request: Request):
user = None
with microsoft_sso:
try:
user = await microsoft_sso.verify_and_process(request)
except Exception as e:
logger.exception(f"ERROR: {pprint.pformat(e)}")
if not user:
logger.warning("NO USER")
return None
return {
"id": user.get("id"),
"picture": user.get("picture"),
"display_name": user.get("display_name"),
"email": user.get("email"),
"provider": user.get("provider"),
}
Metadata
Metadata
Assignees
Labels
No labels