在上一篇Keycloak系列文章中,我們把Keycloak同Spring Security成功适配,其中用了一個keycloak.json的配置。它包含了不少屬性,我覺得在深入學習Keycloak的過程中有必要和大家共同學習一下。
在Spring Security內建Keycloak 擴充卡時需要引入一些額外的配置屬性。一般我們會把它配置到Spring Boot的配置檔案中。
Keycloak領域名稱,這是一個必須項。
應用的client_id,Keycloak伺服器上注冊的每個用戶端都有一個獨一無二的辨別。這是一個必須項。
PEM格式的realm公鑰,不建議用戶端配置。每次Keycloak Adapter會自動拉取它。
Keycloak伺服器的基本位址,格式通常是https://host:port/auth,這是一個必須項。
Keycloak 伺服器的通信使用HTTPS的範圍,是可選的,有三個選項:
external,預設值,表示外部的請求都必須使用HTTPS。
all,顧名思義,所有的都使用HTTPS。
none, 禁用HTTPS。
Keycloak伺服器的安全端口,預設 8443。
如果設定為true, Keycloak Adapter将檢查令牌攜帶的使用者角色是否跟資源一緻;否則會去查詢realm中使用者的角色。預設false。
設定為true則不需要為用戶端配置密碼,否則需要配置keycloak.credentials.secret。生成secret的方法是在Keycloak控制台上修改對應用戶端設定選項的通路類型為confidential,然後在安裝中檢視對應配置項。當通路類型不是confidential時該值為false。
開啟跨域(cors)支援。可選項,預設false。如果設定為true就激活了cors-開頭的配置項,這些配置項都不啰嗦了,都是常見的跨域配置項。
對于服務,這應該設定為true。如果啟用,擴充卡将不會嘗試對使用者進行身份驗證,而隻會驗證不記名令牌。如果使用者請求資源時沒有攜帶Bearer Token将會401。這是可選的。預設值為false。
如果你的應用不僅僅是Web應用而且還提供API服務(現在通常是Restful Service),開啟了這一配置後Keycloak伺服器會通過請求标頭相對“智能”地引導未認證的使用者到登入頁面還是傳回401狀态。比bearer-only更加智能一些。
為擴充卡開啟Basic Authentication認證,如果開啟就必須提供secret。預設false。
JavaScript CORS 請求通過根路徑下/k_query_bearer_token用來從伺服器擷取令牌的,好像是nodejs相關的後端應用使用的東西,我折騰了半天沒有調用成功。
當用戶端的通路類型(access type)為Confidential時,需要配置用戶端令牌,目前支援secret和jwt類型。參考public-client中的描述。
上面列舉了大部分我們常用的屬性,後面的屬性和定制Keycloak伺服器相關暫時不介紹了。Keycloak剩下的配置項可以到Keycloak Java擴充卡配置項[1]檢視。下一篇我将對Keycloak Spring Security認證授權的流程作出一個分析。