Kisso的使用說明(個人總結,一直在更新)
簽名的問題;
如何你使用的JDK11或是更高的版本,則在在生成RSA時會提示:
PKCS12 密鑰庫不支持其他存儲和密鑰口令。正在忽略用戶指定的-keypass值
*如果是這樣,那麼請你在JDK1.8/sdk/bin/下面生成,最多則會提示Warning: JKS 密鑰庫使用專用格式。建議使用 "keytool -importkeystore -srckeystore key.jks -destkeystore key.jks -deststoretype pkcs12" 遷移到行業標準格式 PKCS12。
不然你就像網友學習,先生成PKCS12
再轉成RSA
配置
打開Kisso的配置類,發現裏面有默認的
keypsss
等配置信息,如果你要自已生成,就在application.yml
文件中做相應的覆蓋
點擊查看代碼
/
@Data
@Accessors(chain = true)
public class SSOConfig {
/**
* 編碼格式,默認 UTF-8
*/
private String encoding = SSOConstants.ENCODING;
/**
* 簽名密鑰(用於對此算法)
*/
private String signKey;
/**
* 簽名算法
*
* @see io.jsonwebtoken.SignatureAlgorithm
*/
private String signAlgorithm = "HS512";
/**
* RSA 私鑰 key.jks 存儲路徑
*/
private String rsaJksStore = "key.jks";
/**
* RSA 公鑰 public.cert 存儲路徑
*/
private String rsaCertStore = "public.cert";
/**
* RSA 密鑰 Alias
*/
private String rsaAlias = "jwtkey";
/**
* RSA 密鑰 keypass
*/
private String rsaKeypass = "llTs1p68K";
/**
* RSA 密鑰 storepass
*/
private String rsaStorepass = "lLt66Y8L321";
/**
* 訪問票據名
*/
private String accessTokenName = "accessToken";
/**
* cookie 名稱
*/
private String cookieName = "uid";
/**
* cookie 所在有效域名,不設置爲當前訪問域名
*/
private String cookieDomain;
/**
* cookie 路徑
*/
private String cookiePath = "/";
/**
* cookie 是否設置安全,設置 true 那麼只能爲 https 協議訪問
*/
private boolean cookieSecure = false;
/**
* cookie 是否爲只讀狀態,設置 js 無法獲取
*/
private boolean cookieHttpOnly = true;
/**
* cookie 有效期 -1 關閉瀏覽器失效
*/
private int cookieMaxAge = -1;
/**
* cookie的SameSite屬性用來限制第三方Cookie,從而減少安全風險(防止CSRF) 支持三種模式:
* <p>
* Strict 僅允許一方請求攜帶Cookie,即瀏覽器將只發送相同站點請求的Cookie,即當前網頁URL與請求目標URL完全一致,瀏覽器默認該模式。
* <p>
* Lax 允許部分第三方請求攜帶Cookie
* <p>
* None 無論是否跨站都會發送Cookie
*/
private String cookieSameSite;
/**
* 是否驗證 cookie 設置時瀏覽器信息
*/
private boolean cookieBrowser = false;
/**
* 是否驗證 cookie 設置時 IP 信息
*/
private boolean cookieCheckIp = false;
/**
* 登錄地址
*/
private String loginUrl = "";
/**
* 退出地址
*/
private String logoutUrl = "";
/**
* 登錄成功回調地址
*/
private String paramReturnUrl = "ReturnURL";
/**
* 緩存有效期設置
*/
private int cacheExpires = CookieHelper.CLEAR_BROWSER_IS_CLOSED;
/**
* 訪問票據
*/
private SSOToken ssoToken;
/**
* 權限認證(默認 false)
*/
private boolean permissionUri = false;
/**
* 插件列表
*/
private List<SSOPlugin> pluginList;
/**
* SSO 緩存
*/
private SSOCache cache;
/**
* SSO 權限授權
*/
private SSOAuthorization authorization;
public SSOConfig() {
/* 支持 setInstance 設置初始化 */
}
/**
* new 當前對象
*/
public static SSOConfig getInstance() {
return SSOHelper.getSsoConfig();
}
public static String getSSOEncoding() {
return getInstance().getEncoding();
}
public String getRsaCertStore() {
if (null == rsaCertStore) {
throw new KissoException("public.cert not found");
}
return rsaCertStore;
}
/**
* 簽名密鑰
*/
public String getSignKey() {
if (null == signKey) {
return "Janfv5UgKhoDrH73EZT7m+81pgqLN3EjWKXZtqF9lQHH9WruxqX0+FkQys6XK0QXzSUckseOAZGeQyvfreA3tw==";
}
return signKey;
}
public String getRsaJksStore() {
if (null == rsaJksStore) {
throw new KissoException("jwt.jks not found");
}
return rsaJksStore;
}
public SSOAuthorization getAuthorization() {
return authorization;
}
public SSOConfig setAuthorization(SSOAuthorization authorization) {
this.authorization = authorization;
return this;
}
public String getCookieSameSite() {
if (null != cookieSameSite && ("Strict".equalsIgnoreCase(cookieSameSite)
|| "Lax".equalsIgnoreCase(cookieSameSite)
|| "None".equalsIgnoreCase(cookieSameSite))) {
return cookieSameSite;
}
return null;
}
/**
* <p>
* 生成 Token 緩存主鍵
* </p>
*
* @param userId 用戶ID
* @return
*/
public static String toCacheKey(Object userId) {
StringBuffer ck = new StringBuffer();
ck.append("ssoTokenKey_");
ck.append(userId);
return ck.toString();
}
}