获取 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',
}
我正在使用 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',
}