FHIR 服務存取權杖驗證

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 服務時,伺服器會驗證:

  1. 權杖具有正確的 Audience (aud 宣告)。
  2. 憑證所發放的使用者或主體被允許存取 FHIR 伺服器資料平面。 oid該憑證的聲明包含一個身份物件 ID,該 ID 唯一識別使用者或主體。

我們建議將 FHIR 服務設定為使用 Azure RBAC 來管理資料平面角色指派。 如果你的 FHIR 服務使用外部或次要的 Microsoft Entra 租戶,也可以設定本地 RBAC。

當使用 OSS Microsoft FHIR 伺服器 for Azure 時,伺服器會驗證:

  1. 權杖具有正確的 Audience (aud 宣告)。
  2. 該代幣在 roles 索賠中有一個角色,允許存取 FHIR 伺服器。

關於如何在 FHIR 伺服器上定義角色的詳細資訊。

FHIR 伺服器也可能驗證存取權杖是否具備其範圍,以存取用戶端嘗試登入的 FHIR API 部分(在權杖宣告 scp 中)。 目前,FHIR 服務並未驗證令牌範圍。

下一步

在本文中,你了解了 FHIR 服務存取權杖驗證步驟。 欲了解更多支援的 FHIR 服務功能,請參閱

備註

FHIR® 是 HL7 的註冊商標,在 HL7 的許可下使用。