获取 FHIR 的访问令牌 OAuth2 Azure api - Python

Get Access Token OAuth2 Azure api for FHIR - Python

我正在使用 python 将 FHIR jsons 插入 Azure API 以获得 FHIR。我已经为 fhir 服务部署了 Azure api,并且还进行了应用程序注册。

我的应用程序不是 Web 应用程序。它只是读取输入 json 并将其发布到 FHIR 服务器。因此,我创建了 Public/Mobile&Desktop 应用程序。

与 postman 我能够成功 post 一条消息。但是,我想用我的 python 脚本来做到这一点。我对通过 OAuth2 获取访问令牌感到震惊。

我尝试了以下代码并抛出空租户 ID。当我用谷歌搜索 OAuth2 时,有多个包,如 rauth、ADAL、msal。 None 其中对我有用。

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 条回复,但 returns html 表示用户登录时出现问题。有没有一种通过 python 脚本获取 OAuth2 令牌的简单方法。我检查了与此相关的其他 SO posts。大多数答案都不适合我。

您要做的是客户端凭据流,您可以在此处阅读更多信息:https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow

对于用于 FHIR 的 Azure API,您想创建一个服务客户端 (https://docs.microsoft.com/en-us/azure/healthcare-apis/register-service-azure-ad-client-app),一旦您有了服务客户端,您需要将您的请求修改为类似(未测试)的内容:

对于 AAD 终结点的 v2.0(推荐):

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',
    }

对于 v1.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',
    }