使用 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 執行個體。
在本機、Visual Studio Code 中,在 Azure Cloud Shell 或 PowerShell 中執行程式碼,以將 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 服務中的特定病患資源產生關聯,並確認驗證流程如預期般運作。
使用 fhirUser
自定義使用者屬性連結 B2C 使用者
fhirUser
自定義使用者屬性可用來連結 B2C 使用者與 FHIR 服務中的使用者資源。 在此範例中,會在 B2C 租用戶中建立名為 Test Patient1 的使用者。 在稍後的步驟中,會在 FHIR 服務中建立患者資源。 Test Patient1 使用者會藉由將 fhirUser
屬性值設定為病患資源識別碼,連結至病患資源。 如需自定義使用者屬性的詳細資訊,請參閱 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 Service。
在 [支援的帳戶類型] 清單中,選取 [任何身分識別提供者或組織目錄中的帳戶 (適用於以使用者流程驗證使用者)]。
在 [重新導向 URI] 下拉式清單底下,選取 [公用用戶端/原生 (行動裝置及桌上型電腦)] 。 使用 Postman 回呼 URI https://oauth.pstmn.io/v1/callback填入值。 回撥 URI 適用於測試目的。
在 [權限] 區段中,選取 [對 openid 與 offline_access 權限授與管理員同意]。
選擇 [註冊]。 等待應用程式註冊完成。 瀏覽器會自動瀏覽至應用程式 [概觀] 頁面。
設定應用程式 API 權限
在左窗格中的 [應用程式註冊頁面] 上,選擇 [資訊清單]。
捲動直到您找到
oauth2Permissions
陣列為止。 將陣列取代為 oauth2Permissions.json 檔案中的一或多個值。 複製整個陣列或個別權限。如果您將權限新增至清單,B2C 租用戶中的任何使用者都可以使用 API 權限取得存取權杖。 如果 B2C 租用戶內的使用者不適合存取層級,請勿將其新增至陣列,因為沒有辦法限制使用者子集的權限。
填入 oauth2Permissions 陣列之後,請選擇 [儲存]。
公開 Web API 並指派應用程式識別碼 URI
在左窗格中的 [應用程式註冊頁面] 上,選擇 [揭露 API]。
選擇新增。
根據預設,應用程式識別碼 URI 字段會填入應用程式 (用戶端) 識別碼。 如有需要,請變更值。 在此範例中,值會顯示為 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 授權單位和用戶端識別碼
使用授權單位和用戶端識別碼 (或應用程式標識符) 參數,將 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
從資源應用程式概觀頁面擷取用戶端識別碼。
使用 ARM 範本部署 FHIR 服務
使用 ARM 範本 簡化 FHIR 服務的部署。 使用 PowerShell 或 Azure CLI,將 ARM 範本部署至 Azure 訂用帳戶。
在本機、Visual Studio Code 中,在 Azure Cloud Shell 或 PowerShell 中執行程式碼,以將 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 以取得存取權杖
在本機或網頁瀏覽器中執行 Postman 應用程式。 如需取得適當 FHIR 服務存取權的步驟,請參閱使用 Postman 存取 FHIR 服務。
當您遵循 [取得 FHIR 資源] 區段中的步驟時,要求會傳回空的回應,因為 FHIR 服務是新的且沒有任何患者資源。
在 FHIR 服務中建立病患資源
請務必注意,在 B2C 租用戶中的使用者 (例如患者或醫療從業者) 連結到 FHIR 資源之前,並無法讀取任何資源。 在租用戶 FHIR 服務所在的 Microsoft Entra 識別碼中,具有 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 的應用程式,。
注意應用程式 (用戶端) 識別碼值。
瀏覽回 B2C 租用戶首頁,在左窗格中選取 [使用者]。
選取 [Test Patient1]。
記下 [物件識別碼] 值。
開啟 Microsoft Graph 總管。 使用指派給 B2C 租用戶全域管理員角色的使用者登入。 (最好在 B2C 租用戶中建立新的系統管理員使用者,以管理租用戶中的使用者。)
選取使用者的虛擬人偶,然後選擇同意權限。
捲動至 [使用者]。 同意 User.ReadWrite.All。 此權限可讓您使用
fhirUser
宣告值更新 Test Patient1 使用者。同意程式完成之後,更新使用者。 您需要 b2c-extensions-app 應用程式 (用戶端) 識別碼和使用者物件識別碼。
將方法變更為
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 資源識別碼。
如需詳細資訊,請參閱透過 Microsoft Graph 管理擴充屬性。
格式化要求之後,請選擇 [執行查詢]。 等候成功回應,確認 B2C 租用戶中的用戶已連結到 FHIR 服務中的病患資源。
設定 Postman 以取得 B2C 使用者的存取權杖
取得存取權杖以測試驗證流程。
啟動 Postman 應用程式,然後建立新的 Blank 集合。 在這裡範例中,此集合名為 FHIR Patient。
選取集合概觀中的 [授權] 索引標籤。
在 [類型] 下拉式清單中,選取 [OAuth 2.0]。
捲動至 [設定新權杖] 區段,然後輸入下列值。
回呼 URL。 建立 B2C 資源應用程式時,會設定此值。
https://oauth.pstmn.io/v1/callback
驗證 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
用戶端識別碼。 此值是 B2C 資源應用程式的應用程式 (用戶端) 識別碼。
{YOUR_APPLICATION_ID}
[範圍]。 此值定義於 [公開 API] 區段中的 B2C 資源應用程式中。 授與的範圍權限
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 的許可下使用。