Это правильный способ использовать MSAL для Python для аутентификации пользователя для веб-приложения с помощью id_token_claims? - PullRequest
0 голосов
/ 09 июля 2019

Справочная информация:

Я успешно настроил пример кода этого сайта, используя MSAL для python . Этот пример работает с разрешениями Microsoft Graph API в Azure AD, просит пользователя дать согласие и получает ожидаемый результат, который выглядит примерно так:

{
    "token_type": "Bearer",
    "access_token": "eyJ0...",
    "refresh_token": "OAQ...",
    "id_token": "eyJ...",
    ...

    "id_token_claims": {
        "aud": "289...",
        "iss": "https://login.microsoftonline.com/f645ad92-e38d-4d1a-b510-d1b09a74a8ca/v2.0",
        "iat": 1559626249,
        "nbf": 1559626249,
        "exp": 1559630149,
        "aio": "ATQ...",
        "name": "Cloud IDLAB Basic User",
        "oid": "9f4...",
        "preferred_username": "idlab@msidlab4.onmicrosoft.com",
        "sub": "4mB...",
        "tid": "f64...",
        "uti": "91H...",
        "ver": "2.0"
    }
}

Моя конфигурация такая же, как в примере кода, но с моими собственными Azure AD client_secret и client_id:

{
    "authority": "https://login.microsoftonline.com/organizations",
    "client_id": "my_client_id",
    "scope": ["https://graph.microsoft.com/.default"],
    "redirect_uri": "http://localhost:5000/getAToken",
    "client_secret": "mysecret"
}

Цель:

Я надеюсь использовать только MSAL для аутентификации пользователя. В этом случае все, что мне нужно, это id_token. Благодаря MSAL я могу использовать id_token_claims из результата (см. Пример выше), который является проверенным и декодированным id_token претензиями .

Вопрос:

Это правильный способ использовать MSAL для аутентификации пользователя? Мне не нужен access_token, потому что я не хочу вызывать какие-либо другие API.

Мне кажется немного странным, что я делаю запрос, который включает в свой ответ 'access_token` для графа microsoft, но не выполняет вызов api графа (как это сделано в этом примере ADAL ).

Может быть совершенно законно, что MSAL возвращает все, что кому-то может понадобиться, независимо от того, используют ли они его. Я просто хочу быть уверен, что я правильно использую MSAL. Может быть, мой охват должен быть другим (например, мой client_id, может быть, на основе комментариев в коде )?

1 Ответ

1 голос
/ 17 июля 2019

Это правильный способ аутентифицировать пользователя и понять, почему он может показаться странным.

Причина, по которой вы получаете токен доступа, токен ID и токен обновления, заключается в том, какой поток вы используете.Мое предложение состоит в том, чтобы просмотреть потоки для лучшего понимания того, как работает процесс аутентификации и что будет возвращено соответствующим образом.

См. Официальные документы здесь: https://docs.microsoft.com/en-us/azure/active-directory/develop/authentication-scenarios

Для получения дополнительной информации о библиотеке Python MSAL, в частности здесь: https://github.com/AzureAD/microsoft-authentication-library-for-python/wiki

Я также хотел бы уточнить, что ADALMSAL - это разные библиотеки, поскольку библиотека MSAL достигает конечной точки V2.0, а ADAL использует конечную точку v1.0.

Многие другие типы и сценарии аутентификации также описаны в документе здесь: https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-app-types

Один из которых описывает сценарий, в котором возвращается только ID_token.Однако проблема в том, что я не верю, что библиотека Python MSAL правильно реализовала этот поток на данный момент.

Так что, если вы получаете токен доступа, у которого нет никаких разрешений, и выполучив ID_token с указанной библиотекой Python MSAL, это решение должно подойти вашему приложению для проверки того, кем является пользователь.

Однако, если вы пытаетесь быть ближе к спецификации и имеете более чистую реализацию, вы, возможно, захотите изучить различные потоки OAuth2, доступные для документов Microsoft.

В дополнение к этому RFC описывает протоколы OAuth2 также более подробно.https://tools.ietf.org/html/rfc6749

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...