你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure Active Directory B2C 授予对 FHIR 服务的访问权限
医疗保健组织可以将 Azure Active Directory B2C (Azure AD B2C) 与 Azure Health Data Services 中的 FHIR® 服务一起使用,以授予对其应用程序和用户的访问权限。
为 FHIR 服务创建 Azure AD B2C 租户
为 FHIR 服务创建 Azure AD B2C 租户可设置用于管理医疗保健应用程序中用户身份的安全基础结构。
如果已创建 Azure AD B2C 租户,则可以跳到使用 Azure AD B2C 部署 FHIR 服务。
使用 ARM 範本部署 Azure AD B2C 租用戶
使用 PowerShell 或 Azure CLI 以编程方式将 ARM 模板部署到 Azure 订阅。 有关模板的语法、属性和用法的更多信息,请参阅部署 Azure Active Directory B2C 实例。
在 Azure Cloud Shell 或 PowerShell 中的 Visual Studio Code 本地运行代码,将 FHIR 服务部署到 Azure AD B2C 租户。
使用
Connect-AzAccount
以登录到 Azure。 登录后,使用Get-AzContext
验证要使用的订阅和租户。 如果需要,请更改订阅和租户。创建新的资源组或使用现有资源组(后者需跳过“创建资源组”步骤或注释掉以
New-AzResourceGroup
开头的行)。
### variables
$tenantid="your tenant id"
$subscriptionid="your subscription id"
$resourcegroupname="your resource group name"
$b2cName="your b2c tenant name"
### login to azure
Connect-AzAccount -Tenant $tenantid -SubscriptionId $subscriptionid
### create resource group
New-AzResourceGroup -Name $resourcegroupname -Location $region
### deploy the resource
New-AzResourceGroupDeployment -ResourceGroupName $resourcegroupname -TemplateUri https://raw.githubusercontent.com/Azure-Samples/azure-health-data-and-ai-samples/main/samples/fhir-aad-b2c/b2c-arm-template.json -b2cName $b2cNa
将测试 B2C 用户添加到 Azure AD B2C 租户
需要测试 B2C 用户来与 FHIR 服务中的特定患者资源关联,并验证身份验证流是否按预期工作。
将 B2C 用户与 fhirUser
自定义用户属性链接
fhirUser
自定义用户属性用于将 B2C 用户与 FHIR 服务中的用户资源链接起来。 此示例将在 B2C 租户中创建名为 Test Patient1 的用户。 在后面的步骤中,将在 FHIR 服务中创建 patient 资源。 通过将 fhirUser
属性值设置为患者资源标识符,将 Test Patient1 用户链接到患者资源。 有关自定义用户属性的更多信息,请参阅 Azure Active Directory B2C 中的用户流自定义属性。
在 Azure AD B2C 页面的左侧窗格中,选择“用户属性”。
选择“+添加”
在“名称”字段中,输入“fhirUser”(区分大小写)。
从“数据类型”选择列表中,选择“字符串”。
选择“创建”。
创建新 B2C 用户流
用户流定义了用户登录时必须遵循的步骤序列。 此示例中定义了用户流,以便当用户登录时,提供的访问令牌包括 fhirUser
声明。 有关详细信息,请参阅在 Azure Active Directory B2C 中创建用户流和自定义策略。
在 Azure AD B2C 页面的左侧窗格中,选择“用户流”。
选择“+ 新建用户流”。
为用户流提供 B2C 租户唯一的名称。 名称不必全局唯一。 在本例中,用户流的名称为 USER_FLOW_1。 记下这个名字。
确保为本地帐户启用了电子邮件登录,以便测试用户可以登录并获得 FHIR 服务的访问令牌。
在“创建用户流”页面上,滚动至第 5 节。应用程序声明 ,然后选择“显示更多...”以显示所有可用索赔的列表。
选择 fhirUser 声明。
选择“确定”。
选择“创建”。
创建新的 B2C 资源应用程序
B2C 资源应用程序处理从医疗保健应用程序到 Azure Active Directory B2C 的身份验证请求。
在 Azure AD B2C 页面的左侧窗格中,选择“应用注册”。
选择“+ 新注册”。
输入显示名称。 此示例使用 FHIR 服务。
在“支持的帐户类型”列表中,选择任何标识提供者或组织目录中的“帐户”(用于使用用户流验证用户)。
在重定向 URI (推荐) 选择列表中,选择*公共客户端/本地(移动和桌面)。 使用 Postman 调用 URI https://oauth.pstmn.io/v1/callback 填充该值。 此回调 URI 用于测试目的。
在“权限”部分,选择“授予管理员对 openid 和 offline_access 权限的同意”。
选择“注册”。 等待应用程序注册完成。 浏览器会自动导航到应用程序“概述”页面。
配置应用的 API 权限
在左侧窗格的“应用注册”页面上,选择“清单”。
滚动直到找到
oauth2Permissions
数组。 将数组替换为 oauth2Permissions.json 文件中的一个或多个值。 复制整个数组或单个权限。如果向列表添加权限,B2C 租户中的任何用户都可以获得具有 API 权限的访问令牌。 如果某个访问级别不适合 B2C 租户中的某位用户,请勿将该级别添加到数组中,因为没有办法将权限限制在一部分用户的范围内。
填充 oauth2Permissions 数组后,选择“保存”。
公开 Web API 并分配应用程序 ID URI
在左窗格的“应用注册”页面上,选择“公开 API”。
选择“添加” 。
默认情况下,应用程序 ID URI 字段由应用程序(客户端)ID 填充。 如果需要,请更改该值。 在本例中,值为“fhir”。
选择“保存”。
在左侧窗格中的“应用注册”页面上,选择“API 权限”。
选择“+ 添加权限”。
在“请求 API 权限”窗格中,选择“我的组织使用的 API”。
从列表中选择资源应用程序。
在“患者”部分的“请求 API 权限”窗格中,选择至少一个权限。 在本例中,选择了权限
patient.all.read
,这表示请求具有范围patient.all.read
的访问令牌的用户具有患者隔离舱 (patient.all.read) 中所有 FHIR (patient.all.read) 资源的“读取”权限 (patient.all.read)。有关更多信息,请参阅“患者隔离舱”。选择“添加权限”。
在 API 权限页的“已配置权限”部分中,选择“授予管理员同意”。
以 Azure Active Directory B2C 作为标识提供者部署 FHIR 服务
以 Azure Active Directory B2C 作为标识提供者部署 FHIR 服务,允许 FHIR 服务根据用户的 Azure AD B2C 凭据对用户进行身份验证,确保只有授权用户才能访问敏感患者信息
获取 B2C 权限和客户 ID
使用权限和客户端 ID(或应用程序 ID)参数将 FHIR 服务配置为使用 Azure AD B2C 租户作为标识提供者。
使用 B2C 租户名称和用户流名称创建权限字符串。
https://<YOUR_B2C_TENANT_NAME>.b2clogin.com/<YOUR_B2C_TENANT_NAME>.onmicrosoft.com/<YOUR_USER_FLOW_NAME>/v2.0
通过向
.well-known/openid-configuration
端点发出请求来测试权限字符串。 在浏览器中输入字符串以确认其导航到 OpenId 配置 JSON 文件。 如果 OpenId 配置 JSON 加载失败,请确保 B2C 租户名称和用户流名称正确无误。https://<YOUR_B2C_TENANT_NAME>.b2clogin.com/<YOUR_B2C_TENANT_NAME>.onmicrosoft.com/<YOUR_USER_FLOW_NAME>/v2.0/.well-known/openid-configuration
从资源应用程序概述页面中检索客户端 ID。
使用 ARM 模板部署 FHIR 服务
使用 ARM 模板来简化 FHIR 服务的部署。 使用 PowerShell 或 Azure CLI 将 ARM 模板部署到 Azure 订阅。
在 Azure Cloud Shell 或 PowerShell 中的 Visual Studio Code 本地运行代码,将 FHIR 服务部署到 Azure AD B2C 租户。
使用
Connect-AzAccount
以登录到 Azure。 使用Get-AzContext
验证要使用的订阅和租户。 如果需要,请更改订阅和租户。创建新的资源组或使用现有资源组(后者需跳过“创建资源组”步骤或注释掉以
New-AzResourceGroup
开头的行)。
### variables
$tenantid="your tenant id"
$subscriptionid="your subscription id"
$resourcegroupname="your resource group name"
$region="your desired region"
$workspacename="your workspace name"
$fhirServiceName="your fhir service name"
$smartAuthorityUrl="your authority (from previous step)"
$smartClientId="your client id (from previous step)"
### login to azure
Connect-AzAccount
#Connect-AzAccount SubscriptionId $subscriptionid
Set-AzContext -Subscription $subscriptionid
Connect-AzAccount -Tenant $tenantid -SubscriptionId $subscriptionid
#Get-AzContext
### create resource group
New-AzResourceGroup -Name $resourcegroupname -Location $region
### deploy the resource
New-AzResourceGroupDeployment -ResourceGroupName $resourcegroupname -TemplateUri https://raw.githubusercontent.com/Azure-Samples/azure-health-data-and-ai-samples/main/samples/fhir-aad-b2c/fhir-service-arm-template.json -tenantid $tenantid -region $region -workspaceName $workspacename -fhirServiceName $fhirservicename -smartAuthorityUrl $smartAuthorityUrl -smartClientId $smartClientId
验证 Azure AD B2C 用户是否能够访问 FHIR 资源
验证过程包括在 FHIR 服务中创建患者资源,将患者资源链接到 Azure AD B2C 用户,并配置 Postman 以获得 B2C 用户的访问令牌。 验证过程完成后,可以使用 B2C 测试用户获取患者资源。
运行 Postman 以获取访问令牌
在本地或 web 浏览器中运行 Postman 应用程序。 有关获得 FHIR 服务的正确访问权限的步骤,请参阅使用 Postman 访问 FHIR 服务。
按照获取 FHIR 资源部分的步骤进行操作时,请求会返回空响应,因为 FHIR 服务是新的,没有任何患者资源。
在 FHIR 服务中创建患者资源
需要注意的是,B2C 租户中的用户(如患者或从业人员)在链接到 FHIR 资源之前无法读取任何资源。 在 FHIR 服务所在的 Microsoft Entra ID 中具有 FhirDataWriter
或 FhirDataContributor
角色的用户必须执行此步骤。
- 通过将方法更改为
PUT
并使用此正文执行对{{fhirurl}}/Patient/1
的请求,创建具有特定标识符的患者:
{
"resourceType": "Patient",
"id": "1",
"name": [
{
"family": "Patient1",
"given": [
"Test"
]
}
]
}
- 通过将方法更改回
GET
并验证对{{fhirurl}}/Patient
的请求是否返回了新建患者,来验证是否创建了患者。
将患者资源链接到 Azure AD B2C 用户
在 B2C 租户中的测试用户与 FHIR 服务中的资源之间创建显示链接。 使用 Microsoft Graph 中的“扩展属性”创建链接。 有关详细信息,请参阅在在 Azure Active Directory B2C 中定义自定义属性。
转到 B2C 租户。 在左侧窗格中,选择“应用注册”。
选择“所有应用程序”。
选择前缀为 b2c-extensions-app 的应用。
请记下“应用程序 (客户端) ID”值。
导航回 B2C 租户主页,在左侧窗格中选择“用户”。
选择“Test Patient1”。
注意对象 ID 值。
打开 Microsoft Graph Explorer。 使用分配给 B2C 租户的全局管理员角色的用户登录。 (最好在 B2C 租户中新建管理员用户来管理租户中的用户。)
选择用户的头像,然后选择“同意权限”。
滚动到“用户”。 同意 User.ReadWrite.All。 此权限允许使用
fhirUser
声明值更新 Test Patient1 用户。同意过程完成后,请更新用户。 需要 b2c-extensions-app 应用程序(客户端)ID 和用户对象 ID。
将方法更改为
PATCH
。将 URL 更改为 https://graph.microsoft.com/v1.0/users/{USER_OBJECT_ID}。
创建
PATCH
正文。PATCH
本文是单个键值对,其中密钥格式为extension_{B2C_EXTENSION_APP_ID_NO_HYPHENS}_fhirUser
,值为患者https://{YOUR_FHIR_SERVICE}.azurehealthcareapis.com/Patient/1"
的完全合格 FHIR 资源 ID。
有关详细信息,请参见通过 Microsoft Graph 管理扩展属性。
格式化请求后,选择“运行查询”。 等待成功响应,其确认 B2C 租户中的用户链接到 FHIR 服务中的患者资源。
配置 Postman 以获取 B2C 用户的访问令牌
获取访问令牌以测试身份验证流。
启动 Postman 应用程序,然后创建新 Blank 集合。 在本例中,集合名为 FHIR 患者。
在集合概述中选择“授权”选项卡。
在“类型”选择列表中,选择“OAuth 2.0”。
滚动到“配置新令牌”部分并输入以下值。
调用 URL。 此值是在创建 B2C 资源应用程序时配置的。
https://oauth.pstmn.io/v1/callback
Auth URL。 此值可以使用 B2C 租户的名称和用户流的名称创建。
https://{YOUR_B2C_TENANT_NAME}.b2clogin.com/{YOUR_B2C_TENANT_NAME}.onmicrosoft.com/{YOUR_USER_FLOW_NAME}/oauth2/v2.0/authorize
访问令牌 URL。 此值可以使用 B2C 租户的名称和用户流的名称创建。
https://{YOUR_B2C_TENANT_NAME}.b2clogin.com/{YOUR_B2C_TENANT_NAME}.onmicrosoft.com/{YOUR_USER_FLOW_NAME}/oauth2/v2.0/token
客户端 ID。 此值是 B2C 资源应用程序的应用程序(客户端)ID。
{YOUR_APPLICATION_ID}
范围。 此值在 B2C 资源应用程序的“公开 API”部分中定义。 授予权限的范围是
patient.all.read
。 范围请求必须是完全限定的 URL,例如https://testb2c.onmicrosoft.com/fhir/patient.all.read
。
从 B2C 资源应用程序的“公开 API”部分复制完全限定的范围。
{YOUR_APPLICATION_ID_URI}/patient.all.read
使用 B2C 用户获取患者资源
验证 Azure AD B2C 用户是否可以访问 FHIR 资源。
当 Postman 中的授权配置设置为启动 B2C 用户流时,选择“获取新访问令牌”以获取访问令牌。
使用 Test Patient 凭据登录。
选择“使用令牌”可将访问令牌用于集合中的任何请求。
创建新的请求来搜索 FHIR 服务中的患者资源。 选择集合名称旁边的省略号按钮 (...),然后选择“添加请求”。
将方法设置为
GET
,输入完全限定的 FHIR 服务 URL,然后添加路径/Patient
。选择“发送”。
验证响应是否包含单个患者资源。
后续步骤
注意
FHIR® 是 HL7 的注册商标,经 HL7 许可使用。