Невозможно получить информацию о пользователе в токене доступа B2C

def get_access_token(authorization_code):
        
    token_url = "https://login.microsoftonline.com/xxxx-xxxx-xxxx-xxxx-xxxxcxxxxe/oauth2/v2.0/token" 
    redirect_uri = "https://localhost/api/oauth2/callback" 
    client_id = "xxxxxx-xxx-xxxx-xxx-xxxxxx"
    client_secret = "xxxx~xxxxx~xxxx_xxxxxxxxx"
    scope = "https://graph.microsoft.com/.default"


    headers = {'Content-Type' : 'application/x-www-form-urlencoded'}
    token_data = {
        'grant_type': 'client_credentials',
        'code': authorization_code,
        'redirect_uri': redirect_uri,
        'client_id': client_id,
        'client_secret': client_secret,
        'scope': scope,
        }

    response = requests.post(token_url, headers = headers, data=token_data)
    token_json = response.json()

    if 'access_token' in token_json:
        return token_json['access_token']
    else:
        raise Exception(f"Error fetching access token: {token_json.get('error_description', 'Unknown error')}")

Я не могу найти никакой информации о пользователе в носителе, который предоставляет Microsoft. Конечная точка токена кажется правильной, и я получаю всю информацию о пользователе в Microsoft Graph Explorer, но не могу найти ее в моем приложении django.

Ошибка связана с тем, что вы используете поток кода авторизации, но передаете значение параметра как учетные данные клиента для grant_type.

Изначально я зарегистрировал Microsoft Entra ID Application в B2C-арендаторе:

enter image description here

Предоставлено Делегированный тип User.Read.All Разрешение API:

enter image description here

Для устранения ошибки измените код l:

Чтобы получить code, я выполнил следующий запрос авторизации в браузере:


https://login.microsoftonline.com/<b2c_tenant_id>/oauth2/v2.0/authorize? 
&client_id=<app_id>
&client_secret = <client_secret>
&redirect_uri= http://localhost:5000
&response_type=code  
&response_mode=query  
&scope= https://graph.microsoft.com/.default

enter image description here

Ответ:

enter image description here

enter image description here

Вернуться на верх