layout: docs-default
密鑰,簽名和加密
IdentityServer在幾個地方依賴于加密,下面是簡單介紹:
加密傳輸(HTTPS)
IdentityServer默認要求所有請求都通過HTTPS,只通過安全傳輸機制和IdentityServer通信是強制要求。
當然在一些特定的場景,比如SSL被卸載, 可以稍微放寬點要求。請看部署 了解更多信息.
SSL/TLS是在托管程序里面配置的---比如IIS或者直接用HTTP.SYS.
令牌簽名
身份令牌和JWT訪問令牌通過RSA算法(RS256),使用X.509證書簽名。簽名證書在IdentityServerOptions
的SigningCertificate
屬性設置。這個屬性對于身份令牌和JWT訪問令牌是必須設置的。
如果用的是參考令牌,可以不設置簽名證書。
備注 密鑰長度不能小于2048 字節.
簽名密鑰輪轉
X.509證書是有生存期的,不停機更新和輪換簽名密鑰是一件苦難的事情。好消息是,IdentityServer有一些特性可以讓它別的簡單些。
- 發現文檔會公布當前的公開密鑰(和備用密鑰). 令牌使用者可以從中了解密鑰的一些信息。
- 所有的JWT令牌都包含一個密鑰標識,這個標識和發現文檔里的一一對應。
- 訪問令牌驗證中間件周期(每24小時)檢查發現文檔來更新密鑰配置。
密鑰輪換步驟基本如下:
- 拿到一個新的證書替換舊的。
- 在選項中把這個新的證書設置為
SecondarySigningCertificate
。 現在IdentityServer會把新舊兩個證書都公布在發現文檔中,訪問令牌驗證中間件可以處理被任一證書加密的令牌。 - 等待24小時,等所有的客戶端都已經更新配置了。
- 把新的證書設置為主
SigningCertificate
. 移除舊的證書。
Cookie 保護
Cookies同樣需要保護,IdentityServer使用Katana數據保護機制來實現它。如果IIS托管我們的應用。Katana會使用ASP.NET的機器密鑰來保護所有的cookies。如果部署在web farm上,那么需要手動同步所有節點上的密鑰。
如果是自托管,可以接入自定義的Katana數據保護插件或者使用IdentityServer的基于X.509證書的數據保護器。