Azure API for FHIR 存取權杖驗證

Azure API for FHIR 驗證存取權杖的方式取決於實作和設定。 在本文中,我們將逐步解說驗證步驟,這在針對存取問題進行疑難排解時很有説明。

驗證權杖沒有識別提供者的問題

權杖驗證的第一個步驟是確認權杖是由正確的識別提供者所簽發,且尚未修改權杖。 FHIR 伺服器將會設定為使用稱為授權 Authority 單位 的特定識別提供者。 FHIR 伺服器會從 /.well-known/openid-configuration 端點擷取識別提供者的相關資訊。 當您使用 Azure Active Directory (Azure AD) 時,完整 URL 為:

GET https://login.microsoftonline.com/<TENANT-ID>/.well-known/openid-configuration

其中 <TENANT-ID> 是特定的 Azure AD 租使用者 (租使用者識別碼或功能變數名稱) 。

Azure AD 會將類似此檔的檔傳回給 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 伺服器可以使用這個來驗證它是否收到驗證權杖。

驗證權杖的宣告

一旦伺服器驗證權杖的真確性,FHIR 伺服器就會繼續驗證用戶端是否具有存取權杖所需的宣告。

當您使用 Azure API for FHIR 時,伺服器將會驗證:

  1. 權杖具有正確的 Audience 宣告 (aud) 。
  2. 允許簽發權杖的使用者或主體存取 FHIR 伺服器資料平面。 oid權杖的宣告包含識別物件識別碼,可唯一識別使用者或主體。

我們建議將 FHIR 服務 設定為使用 Azure RBAC 來管理資料平面角色指派。 不過,如果您的 FHIR 服務使用外部或次要 Azure AD 租使用者,您也可以 設定本機 RBAC

當您使用適用于 Azure 的 OSS Microsoft FHIR 伺服器時,伺服器將會驗證:

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

請參閱如何在 FHIR 伺服器上定義角色的詳細資料

FHIR 伺服器也可以驗證存取權杖的範圍 (權杖宣告 scp) 存取用戶端嘗試存取 FHIR API 的一部分。 目前,適用于 Azure 的 Azure API for FHIR 和 FHIR 伺服器不會驗證權杖範圍。

下一步

既然您已瞭解如何逐步執行權杖驗證,您可以完成建立 JavaScript 應用程式的教學課程,並閱讀快速醫療保健互通性資源 (FHIR®) 資料。

FHIR® 是 HL7 的注冊商標,可與 HL7 的許可權搭配使用。