Azure 健康資料服務的驗證與授權
驗證
Azure Health Data Services 是使用 Microsoft Entra ID 的安全受控服務集合,這是支援 OAuth 2.0 的全域識別提供者。
若要讓 Azure Health Data Services 存取 Azure 資源,例如記憶體帳戶和事件中樞,您必須啟用系統受控識別,並將適當的許可權授與受控識別。 如需詳細資訊,請參閱 Azure 受控識別。
用戶端應用程式會在 Microsoft Entra 識別符中註冊,並可用來存取 Azure Health Data Services。 用戶資料訪問控制是在實作商業規則的應用程式或服務中完成的。
應用程式角色
Azure Health Data Services 的已驗證使用者和用戶端應用程式必須指派給適當的應用程式角色。
Azure Health Data Services 中的 FHIR® 服務會提供下列角色:
- FHIR 數據讀取器:讀取和搜尋 FHIR 數據。
- FHIR 數據寫入器:讀取、寫入和虛刪除 FHIR 數據。
- FHIR 數據匯出者:讀取和匯出 ($export 運算子) 數據。
- FHIR 資料匯入工具:讀取和匯入 ($import 運算子) 資料。
- FHIR 數據參與者:執行所有數據平面作業。
- FHIR 資料轉換器:使用轉換器執行資料轉換。
- FHIR SMART 使用者:允許使用者根據 SMART IG V1.0.0規格來讀取和寫入 FHIR 數據。
Azure Health Data Services 中的 DICOM® 服務提供下列角色:
- DICOM 資料擁有者:讀取、寫入和刪除 DICOM 數據。
- DICOM 數據讀取:讀取 DICOM 數據。
MedTech 服務不需要應用程式角色,但它確實依賴 Azure 事件中樞 數據接收器來擷取儲存在組織訂用帳戶事件中樞中的數據。
授權
獲得適當的應用程式角色授與之後,已驗證的使用者和用戶端應用程式可以藉由取得 Microsoft Entra ID 所簽發的有效存取令牌,以及執行應用程式角色所定義的特定作業,來存取 Azure Health Data Services。
- 對於 FHIR 服務,存取令牌是服務或資源特有的。
- 對於 DICOM 服務,存取令牌會授與資源
dicom.healthcareapis.azure.com
,而不是特定服務。 - 針對 MedTech 服務,不需要存取令牌,因為它不會公開給使用者或用戶端應用程式。
授權的步驟
Microsoft Entra 文件詳述取得存取令牌的方法有兩種: 授權碼流程 和 客戶端認證流程。
以下是如何使用 授權碼流程取得 Azure Health Data Services 的存取令牌:
用戶端會將要求傳送至 Microsoft Entra 授權端點。 Microsoft Entra ID 會將用戶端重新導向至登入頁面,讓使用者使用適當的認證進行驗證(例如:使用者名稱和密碼,或雙因素驗證)。 成功驗證時,授權碼會傳回給用戶端。 僅限 Microsoft Entra 允許將此授權碼傳回至用戶端應用程式註冊中設定的已註冊回復 URL。
用戶端應用程式會在 Microsoft Entra 令牌端點交換存取令牌的授權碼。 當用戶端應用程式要求令牌時,應用程式可能必須提供客戶端密碼(您可以在應用程式註冊期間新增)。
例如,用戶端向 Azure Health Data Services 提出要求,
GET
要求搜尋 FHIR 服務中的所有患者。 要求會在要求標頭中包含HTTP
存取權杖,例如Authorization: Bearer xxx
。Azure Health Data Services 會驗證令牌是否包含適當的宣告(令牌中的屬性)。 如果有效,它會完成要求,並將數據傳回給用戶端。
在客戶端認證流程中,許可權會直接授與應用程式本身。 當應用程式向資源呈現令牌時,資源會強制應用程式本身具有執行動作的授權,因為沒有任何使用者參與驗證。 因此,這與授權碼流程不同,方式如下:
- 使用者或用戶端不需要以互動方式登入。
- 不需要授權碼。
- 存取令牌是直接透過應用程式許可權取得。
存取權杖
存取令牌是已簽署的 Base64 編碼屬性集合(claims),可傳達授與使用者或用戶端之用戶端身分識別、角色和許可權的相關信息。
Azure Health Data Services 通常會預期 JSON Web 令牌。 它包含三個部分:
- 頁首
- 承載 (宣告)
- 簽章,如下圖所示。 如需詳細資訊,請參閱 Azure 存取令牌。
使用在線工具,例如 https://jwt.ms 檢視令牌內容。 例如,您可以檢視宣告詳細數據。
宣告類型 | 值 | 注意事項 |
---|---|---|
澳元 | https://xxx.fhir.azurehealthcareapis.com | 識別權杖的預定接收者。 在 id_tokens 中,對像是應用程式的應用程式識別碼,指派給 Azure 入口網站 中的應用程式。 如果您的應用程式應該驗證此值,並在值不相符時拒絕令牌。 |
iss | https://sts.windows.net/{tenantid}/ | 識別建構及傳回令牌的安全性令牌服務(STS),以及用戶驗證所在的 Microsoft Entra 租使用者。 如果令牌是由 v2.0 端點所發出,URI 會以 結尾 /v2.0 。 GUID,指出用戶是來自 Microsoft 帳戶的取用者使用者。9188040d-6c67-4c5b-b112-36a304b66dad 您的應用程式應該使用宣告的 GUID 部分來限制一組可登入應用程式的租使用者,如果適用的話。 |
iat | (時間戳) | 「已發出 At」表示何時發生此令牌的驗證。 |
nbf | (時間戳) | “nbf” (不是之前) 宣告會識別 JWT 不得接受進行處理的時間。 |
exp | (時間戳) | “exp” (到期時間) 宣告會識別在 JWT 必須接受處理之後的到期時間。 資源可能在此時間之前拒絕令牌,例如,如果需要驗證變更,或偵測到令牌撤銷。 |
Aio | E2ZgYxxx | Microsoft Entra ID 用來記錄數據以供重複使用令牌的內部宣告。 應該忽略。 |
appid | e97e1b8c-xxx | 使用令牌之用戶端的應用程式識別碼。 應用程式可以做為本身或代表使用者。 應用程式標識碼通常代表應用程式物件,但它也可以代表 Microsoft Entra ID 中的服務主體物件。 |
appidacr | 1 | 指出客戶端的驗證方式。 針對公用用戶端,值為 0。 如果使用用戶端識別碼和客戶端密碼,則值為 1。 如果客戶端憑證用於驗證,則值為 2。 |
idp | https://sts.windows.net/{tenantid}/ | 記錄驗證權杖主體的身分識別提供者。 這個值與簽發者宣告的值相同,除非用戶帳戶不在與簽發者相同的租使用者中, 例如來賓。 如果宣告不存在,表示 可以改用 iss 的值。 對於在組織內容中使用的個人帳戶(例如,受邀加入 Microsoft Entra 租使用者的個人帳戶),idp 宣告可能是 「live.com」或包含 Microsoft 帳戶租使用者 9188040d-6c67-4c5b-b112-36a304b66dad 的 STS URI。 |
oid | 例如,tenantid | Microsoft 身分識別系統中物件的不可變標識碼,在此案例中為用戶帳戶。 此識別碼可唯一識別應用程式之間的使用者 - 兩個不同的應用程式登入相同使用者會收到 oid 宣告中的相同值。 Microsoft Graph 會將此標識子當做指定用戶帳戶的 ID 屬性傳回。 因為 oid 允許多個應用程式將使用者相互關聯,因此需要配置檔範圍才能接收此宣告。 注意:如果單一使用者存在於多個租使用者中,則使用者在每個租使用者中包含不同的物件識別碼,即使使用者以相同的認證登入每個帳戶,也會被視為不同的帳戶。 |
Rh | 0.ARoxxx | Azure 用來重新驗證令牌的內部宣告。 應該忽略它。 |
sub | 例如,tenantid | 令牌判斷提示信息的主體,例如應用程式的使用者。 這個值是不可變的,無法重新指派或重複使用。 主體是一個配對標識碼 - 它對於特定應用程式識別碼是唯一的。 因此,如果單一使用者使用兩個不同的用戶端標識元登入兩個不同的應用程式,則這些應用程式會收到兩個不同的主旨宣告值。 根據架構和隱私權需求,您可能不希望此結果。 |
tid | 例如,tenantid | GUID,表示用戶來自的 Microsoft Entra 租使用者。 針對公司與學校帳戶,GUID 是使用者所屬組織的固定租用戶標識碼。 針對個人帳戶,值為 9188040d-6c67-4c5b-b112-36a304b66dad。 需要配置檔範圍才能接收此宣告。 |
Uti | bY5glsxxx | Azure 用來重新驗證令牌的內部宣告。 應該忽略它。 |
ver | 1 | 表示令牌的版本。 |
存取令牌預設為有效的一小時。 您可以在更新令牌到期之前,先取得新的令牌,或使用重新整理令牌進行更新。
若要取得存取令牌,您可以使用 Postman、Visual Studio Code、PowerShell、CLI、curl 和 Microsoft Entra 驗證連結庫等工具。
加密
當您建立 Azure Health Data Services 的新服務時,您的數據預設會使用 Microsoft 管理的金鑰 進行加密。
- FHIR 服務會在數據存放區中保存數據時,提供待用數據的加密。
- DICOM 服務會在數據存放區中保存包含內嵌元數據的影像處理數據時,提供待用數據的加密。 在 FHIR 服務中擷取並保存元數據時,它會自動加密。
- MedTech 服務會在數據對應和正規化之後,將裝置訊息保存到自動加密的 FHIR 服務。 如果裝置訊息傳送至使用 Azure 儲存體 來儲存資料的 Azure 事件中樞,數據會自動以 Azure 儲存體 服務加密 (Azure SSE) 加密。