【问题标题】:Get Access Token OAuth2 Azure api for FHIR - Python获取 FHIR 的访问令牌 OAuth2 Azure api - Python
【发布时间】:2020-08-01 14:40:57
【问题描述】:

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

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

使用邮递员,我能够成功发布消息。但是,我想用我的 python 脚本来做到这一点。我对通过 OAuth2 获取访问令牌感到震惊。

我尝试了以下代码及其抛出空的租户 id 。当我在谷歌上搜索 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,说明用户登录时出现问题。有没有一种通过 python 脚本获取 OAuth2 令牌的简单方法。我检查了与此相关的其他 SO 帖子。大多数答案对我不起作用。

【问题讨论】:

    标签: python oauth-2.0 hl7-fhir fhir-server-for-azure


    【解决方案1】:

    您要做的是客户端凭据流,您可以在此处阅读更多信息: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',
        }
    

    【讨论】:

    • 我能够使用 client_credentials 流成功检索 access_token。但我收到 403 - 插入患者记录时的身份验证错误
    • 这可能是因为服务主体的对象 ID 不在允许的对象 ID 列表中。 docs.microsoft.com/en-us/azure/healthcare-apis/…
    • 没有。我在 FHIR 服务器的身份验证部分添加了对象 ID。即使使用邮递员,当我尝试发布授权代码时,它也可以正常工作。使用客户端凭据,它会抛出身份验证错误
    • 我认为您可能添加了错误的 oid。我在这里为您的其他帖子添加了详细答案:stackoverflow.com/questions/61323003/…
    • v2 范围值结尾 /.default 是 key
    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 2022-11-28
    • 2011-07-28
    • 2013-03-25
    • 2017-12-10
    • 2012-08-13
    • 2013-07-29
    • 1970-01-01
    相关资源
    最近更新 更多