403 - Ошибка авторизации - OAuth2.0 - Маркер доступа - Azure Api для Fhir

Я развернул и настроил API Azure для FHIR по этой ссылке - https://docs.microsoft.com/en-gb/azure/healthcare-apis/tutorial-web-app-fhir-server

Используя почтальон, я могу успешно вставить информацию о пациенте на fhir-сервер.

Чтобы автоматизировать это, я использую Python и поток обслуживания клиентов.

   def get_access_token(self):

        token_url = 'https://login.microsoftonline.com/{}/oauth2/v2.0/token'.format(azure_app_tenant_id)

        token_data = {
        'grant_type': 'client_credentials',
        'client_id': azure_app_client_id,
        'client_secret': azure_app_client_secret,
        'scope': fhir_endpoint_url + "/.default",

        }

        token_r = requests.post(token_url, data=token_data)

        log.info("Retrieving Access Token")
        if token_r.status_code == 200:
            log.info("Access Token Retrieved Successfully")
        else:
            raise Exception("Error retrieving access token")

        print(token_r.json()["access_token"])
        return token_r.json()["access_token"]

Я могу получить токен доступа с помощью get_access_token. Однако, когда я использую access_token и вставляю запись о пациенте, его выдача не удалась - ошибка 403.

    def insert_patient_record(self, payload):
        log.info("Inserting Patient Record")
        headers = {
            'Authorization': 'Bearer {}'.format(self.get_access_token()),
            'Content-Type': 'application/json'
        }

        response = requests.request("POST", fhir_endpoint_url, headers=headers, data=payload)
        print("Response Code: ", response.status_code)
        if response.status_code == 200:
            log.info("Patient Record inserted Successfully")
        else:
            print("Response Text: ", response.text)
            raise Exception("Error inserting patient record")

Response Text:  {"resourceType":"OperationOutcome","id":"24515888da8e954da1e763d96193155b","issue":[{"severity":"error","code":"forbidden","diagnostics":"Authorization failed."}]}

Примечание. В разделе "Аутентификация FHIR-сервера" я добавил идентификатор объекта зарегистрированного приложения, которое я ранее создал в ADD.

1 ответ

Решение

Похоже, вы не добавили (правильный) идентификатор объекта зарегистрированного приложения. Важно отметить, что у регистрации приложения есть идентификатор объекта, как и у субъекта-службы. Это идентификатор приложения для субъекта-службы, который вы ищете.

Ознакомьтесь с инструкциями здесь:

https://docs.microsoft.com/en-us/azure/healthcare-apis/find-identity-object-ids

Вы можете найти идентификатор объекта субъекта-службы с помощью PowerShell:

$(Get-AzureADServicePrincipal -Filter "AppId eq 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'").ObjectId

или Azure CLI:

az ad sp show --id XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX | jq -r .objectId

Я бы также рекомендовал вставить ваш токен во что-то вроде https://jwt.ms/ и посмотреть наoidЗапрос. Это идентификатор добавленного вами объекта?

Другие вопросы по тегам