我正在使用python将FHIR json插入用于FHIR的Azure API中。我已经将Azure api部署为服务,并且还进行了应用程序注册。
我的应用不是网络应用。它只是读取输入的json并将其发布到FHIR服务器。因此,我创建了Public / Mobile&Desktop应用程序。
通过邮递员,我能够成功地发布消息。但是,我想用我的python脚本做到这一点。我对通过OAuth2获取访问令牌感到震惊。
我尝试了以下代码,并抛出了空的房客id。当我用Google搜索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帖子。大多数答案对我都不起作用。
您正在寻找的是客户端凭据流,您可以在此处了解更多信息: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',
}