403 - 授权错误 - OAuth2.0 - 访问令牌 - Azure Api For Fhir

2023-12-06

我已使用此链接部署并配置了适用于 FHIR 的 Azure API -https://learn.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 并插入患者记录时,它抛出 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-服务器身份验证部分中,我添加了之前在 ADD 中创建的已注册应用程序的对象 ID。


看起来你有not添加了已注册应用程序的(正确)对象 ID。重要的是,应用程序注册有一个对象 ID,但服务主体也有一个对象 ID。它是您正在查找的服务主体的应用程序 ID。

请在此处查看说明:

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

您可以使用 PowerShell 找到它的服务主体对象 ID:

$(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宣称。这是您添加的对象 ID 吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

403 - 授权错误 - OAuth2.0 - 访问令牌 - Azure Api For Fhir 的相关文章

随机推荐