Получить токен доступа OAuth2 Azure API для FHIR - Python - PullRequest
0 голосов
/ 19 апреля 2020

Я использую python для вставки файлов FHIR в API Azure для FHIR. Я развернул Azure API для службы fhir, а также сделал регистрацию приложения.

Мое приложение не является веб-приложением. Он просто читает входные данные json и публикует их на сервере FHIR. И, следовательно, я создал приложения Public / Mobile & Desktop.

С почтальоном я могу успешно опубликовать сообщение. Тем не менее, я хотел бы сделать это с моим python сценарием. Я поражен при получении токена доступа через OAuth2.

Я попробовал следующий код и его пустой идентификатор клиента. Когда я гуглил об OAuth2, было несколько пакетов, таких как rauth, ADAL, msal. Никто из них не работал для меня.

import requests
app_id = <client_id>
token_url = https://login.microsoftonline.com/<tenant_id>/oauth2/token

    token_data = {
    'resource': 'APP_ID_URL',
    'grant_type': 'password',
    'client_id': app_id,
    'client_secret': client_secret,
    'scope':'',
    'username':'USERNAME',  
    'password':'PASSWORD',

    }


Я получаю ответ 200, но он возвращает html с сообщением о проблеме со входом в систему пользователя. Есть ли простой способ получить токен OAuth2 через скрипт python. Я проверил другие SO сообщения, связанные с этим. Большинство ответов не работают для меня.

1 Ответ

1 голос
/ 19 апреля 2020

То, что вы хотите сделать, это поток учетных данных клиента, о котором вы можете прочитать подробнее здесь: https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow

Для Azure API для FHIR, вы хотите сделать служебный клиент (https://docs.microsoft.com/en-us/azure/healthcare-apis/register-service-azure-ad-client-app), и как только у вас есть служебный клиент, вам нужно изменить свой запрос на что-то вроде (не проверено):

Для версии 2.0 конечной точки AAD ( рекомендуется):

import requests
app_id = <client_id>
token_url = https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token

    token_data = {
    'grant_type': 'client_credentials',
    'client_id': app_id,
    'client_secret': client_secret,
    'scope':'https://<yourfhirservice>.azurehealthcareapis.com/.default',
    }

Для версии 1.0 (https://docs.microsoft.com/en-us/azure/active-directory/azuread-dev/v1-oauth2-client-creds-grant-flow) вы, вероятно, можете сделать что-то вроде:

import requests
app_id = <client_id>
token_url = https://login.microsoftonline.com/<tenant_id>/oauth2/token

    token_data = {
    'grant_type': 'client_credentials',
    'client_id': app_id,
    'client_secret': client_secret,
    'resource':'https://<yourfhirservice>.azurehealthcareapis.com',
    }
...