Azure Health Data Services 中 FHIR® 服務如何驗證存取權杖,取決於實作與設定。 本文將介紹驗證步驟,這些步驟在排查存取問題時會很有幫助。
驗證權杖與識別提供者之間沒有問題
憑證驗證的第一步是驗證該憑證是否由正確的身份提供者發出,且沒有被修改。 FHIR 伺服器已設定為使用特定的身分識別提供者,稱為 Authority。 FHIR 伺服器會從 /.well-known/openid-configuration 端點擷取身份提供者的資訊。 當你使用 Microsoft Entra ID 時,完整網址會是:
GET https://login.microsoftonline.com/<TENANT-ID>/.well-known/openid-configuration
其中 <TENANT-ID> 是特定的 Microsoft Entra 租戶(租戶 ID 或網域名稱)。
Microsoft Entra ID 會將以下文件回傳給 FHIR 伺服器。
{
"authorization_endpoint": "https://login.microsoftonline.com/<TENANT-ID>/oauth2/authorize",
"token_endpoint": "https://login.microsoftonline.com/<TENANT-ID>/oauth2/token",
"token_endpoint_auth_methods_supported": [
"client_secret_post",
"private_key_jwt",
"client_secret_basic"
],
"jwks_uri": "https://login.microsoftonline.com/common/discovery/keys",
"response_modes_supported": [
"query",
"fragment",
"form_post"
],
"subject_types_supported": [
"pairwise"
],
"id_token_signing_alg_values_supported": [
"RS256"
],
"http_logout_supported": true,
"frontchannel_logout_supported": true,
"end_session_endpoint": "https://login.microsoftonline.com/<TENANT-ID>/oauth2/logout",
"response_types_supported": [
"code",
"id_token",
"code id_token",
"token id_token",
"token"
],
"scopes_supported": [
"openid"
],
"issuer": "https://sts.windows.net/<TENANT-ID>/",
"claims_supported": [
"sub",
"iss",
"cloud_instance_name",
"cloud_instance_host_name",
"cloud_graph_host_name",
"msgraph_host",
"aud",
"exp",
"iat",
"auth_time",
"acr",
"amr",
"nonce",
"email",
"given_name",
"family_name",
"nickname"
],
"microsoft_multi_refresh_token": true,
"check_session_iframe": "https://login.microsoftonline.com/<TENANT-ID>/oauth2/checksession",
"userinfo_endpoint": "https://login.microsoftonline.com/<TENANT-ID>/openid/userinfo",
"tenant_region_scope": "WW",
"cloud_instance_name": "microsoftonline.com",
"cloud_graph_host_name": "graph.windows.net",
"msgraph_host": "graph.microsoft.com",
"rbac_url": "https://pas.windows.net"
}
FHIR 伺服器的重要屬性包括:
-
jwks_uri,告訴伺服器在哪裡取得驗證憑證簽名所需的加密金鑰,以及 -
issuer,用來告知伺服器此伺服器所發出的代幣中的發行者宣告(iss)將會包含什麼。 FHIR 伺服器可以利用此驗證它是否收到的是真實的 token。
驗證代幣的聲明
一旦伺服器驗證了令牌的真實性,FHIR 伺服器將開始驗證客戶端是否具備存取令牌所需的權利要求。
當您使用 FHIR 服務時,伺服器會驗證:
- 權杖具有正確的
Audience(aud宣告)。 - 憑證所發放的使用者或主體被允許存取 FHIR 伺服器資料平面。
oid該憑證的聲明包含一個身份物件 ID,該 ID 唯一識別使用者或主體。
我們建議將 FHIR 服務設定為使用 Azure RBAC 來管理資料平面角色指派。 如果你的 FHIR 服務使用外部或次要的 Microsoft Entra 租戶,也可以設定本地 RBAC。
當使用 OSS Microsoft FHIR 伺服器 for Azure 時,伺服器會驗證:
- 權杖具有正確的
Audience(aud宣告)。 - 該代幣在
roles索賠中有一個角色,允許存取 FHIR 伺服器。
關於如何在 FHIR 伺服器上定義角色的詳細資訊。
FHIR 伺服器也可能驗證存取權杖是否具備其範圍,以存取用戶端嘗試登入的 FHIR API 部分(在權杖宣告 scp 中)。 目前,FHIR 服務並未驗證令牌範圍。
下一步
在本文中,你了解了 FHIR 服務存取權杖驗證步驟。 欲了解更多支援的 FHIR 服務功能,請參閱
備註
FHIR® 是 HL7 的註冊商標,在 HL7 的許可下使用。