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 時,伺服器將會驗證:
- 權杖具有正確的
Audience
宣告 (aud
) 。 - 允許簽發權杖的使用者或主體存取 FHIR 伺服器資料平面。
oid
權杖的宣告包含識別物件識別碼,可唯一識別使用者或主體。
我們建議將 FHIR 服務 設定為使用 Azure RBAC 來管理資料平面角色指派。 不過,如果您的 FHIR 服務使用外部或次要 Azure AD 租使用者,您也可以 設定本機 RBAC 。
當您使用適用于 Azure 的 OSS Microsoft FHIR 伺服器時,伺服器將會驗證:
- 權杖具有正確的
Audience
宣告 (aud
) 。 - 權杖在宣告中
roles
具有角色,允許存取 FHIR 伺服器。
請參閱如何在 FHIR 伺服器上定義角色的詳細資料。
FHIR 伺服器也可以驗證存取權杖的範圍 (權杖宣告 scp
) 存取用戶端嘗試存取 FHIR API 的一部分。 目前,適用于 Azure 的 Azure API for FHIR 和 FHIR 伺服器不會驗證權杖範圍。
下一步
既然您已瞭解如何逐步執行權杖驗證,您可以完成建立 JavaScript 應用程式的教學課程,並閱讀快速醫療保健互通性資源 (FHIR®) 資料。
FHIR® 是 HL7 的注冊商標,可與 HL7 的許可權搭配使用。