Keycloak Spring Security適配器的常用配置
在上一篇Keycloak系列文章中,我們把Keycloak同Spring Security成功適配,其中用了一個keycloak.json的配置。它包含了不少屬性,我覺得在深入學習Keycloak的過程中有必要和大家共同學習一下。
Keycloak適配器的常用屬性
在Spring Security集成Keycloak 適配器時需要引入一些額外的配置屬性。一般我們會把它配置到Spring Boot的配置文件中。
realm
Keycloak領域名稱,這是一個必須項。
resource
應用的client_id,Keycloak服務器上注冊的每個客戶端都有一個獨一無二的標識。這是一個必須項。
realm-public-key
PEM格式的realm公鑰,不建議客戶端配置。每次Keycloak Adapter會自動拉取它。
auth-server-url
Keycloak服務器的基本地址,格式通常是https://host:port/auth,這是一個必須項。
ssl-required
Keycloak 服務器的通信使用HTTPS的范圍,是可選的,有三個選項:
- external,默認值,表示外部的請求都必須使用HTTPS。
- all,顧名思義,所有的都使用HTTPS。
- none, 禁用HTTPS。
confidential-port
Keycloak服務器的安全端口,默認 8443。
use-resource-role-mappings
如果設置為true, Keycloak Adapter將檢查令牌攜帶的用戶角色是否跟資源一致;否則會去查詢realm中用戶的角色。默認false。
public-client
設置為true則不需要為客戶端配置密碼,否則需要配置keycloak.credentials.secret。生成secret的方法是在Keycloak控制臺上修改對應客戶端設置選項的訪問類型為confidential,然后在安裝中查看對應配置項。當訪問類型不是confidential時該值為false。
enable-cors
開啟跨域(cors)支持。可選項,默認false。如果設置為true就激活了cors-開頭的配置項,這些配置項都不啰嗦了,都是常見的跨域配置項。
bearer-only
對于服務,這應該設置為true。如果啟用,適配器將不會嘗試對用戶進行身份驗證,而只會驗證不記名令牌。如果用戶請求資源時沒有攜帶Bearer Token將會401。這是可選的。默認值為false。
autodetect-bearer-only
如果你的應用不僅僅是Web應用而且還提供API服務(現在通常是Restful Service),開啟了這一配置后Keycloak服務器會通過請求標頭相對“智能”地引導未認證的用戶到登錄頁面還是返回401狀態。比bearer-only更加智能一些。
enable-basic-auth
為適配器開啟Basic Authentication認證,如果開啟就必須提供secret。默認false。
expose-token
JavaScript CORS 請求通過根路徑下/k_query_bearer_token用來從服務器獲取令牌的,好像是nodejs相關的后端應用使用的東西,我折騰了半天沒有調用成功。
credentials
當客戶端的訪問類型(access type)為Confidential時,需要配置客戶端令牌,目前支持secret和jwt類型。參考public-client中的描述。
總結
上面列舉了大部分我們常用的屬性,后面的屬性和定制Keycloak服務器相關暫時不介紹了。Keycloak剩下的配置項可以到Keycloak Java適配器配置項[1]查看。下一篇我將對Keycloak Spring Security認證授權的流程作出一個分析。
參考資料
[1]Keycloak Java適配器配置項: https://www.keycloak.org/docs/latest/securing_apps/index.html#_java_adapter_config
本文轉載自微信公眾號「碼農小胖哥」,可以通過以下二維碼關注。轉載本文請聯系碼農小胖哥公眾號。