簡體   English   中英

403 - 授權錯誤 - OAuth2.0 - 訪問令牌 - Azure Api 對於 Fhir

[英]403 - Authorization Error - OAuth2.0 - Access Token - Azure Api For Fhir

我已經使用此鏈接為 FHIR 部署和配置了 Azure API - https://docs.microsoft.com/en-gb/azure/healthcare-api

使用 postman 我能夠成功地將患者信息插入 fhir-server。

為了實現自動化,我使用了 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 並插入患者記錄時,它會拋出 Authorization Failed - 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-Server Authentication 部分,我添加了我之前在 ADD 中創建的注冊 APP 的 Object ID。

您似乎沒有添加已注冊應用程序的(正確)object id。 重要的是,應用程序注冊有一個 object id,但服務主體也有。 它是您要查找的服務主體的應用程序 ID。

在此處查看說明:

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

您可以找到它的服務主體 object id 和 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聲明。 那是你添加的 object id 嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM