利用 ASP.NET Forms Authentication 實現同主域下不同子域名共享登入狀態(如 a.example.com、b.example.com),需完成三項關鍵設定:
<authentication mode="Forms">
<forms name=".ASPNETFORM" domain=".example.com" loginUrl="/login.aspx"
defaultUrl="/default.aspx" protection="All" timeout="30" path="/"
requireSSL="false" slidingExpiration="true"
enableCrossAppRedirects="false" cookieless="UseDeviceProfile" />
</authentication>
<machineKey validationKey="..." decryptionKey="..." validation="SHA1" />
domain=".example.com":Cookie 作用域涵蓋所有子域名。machineKey:所有應用程式必須使用相同金鑰,確保票據加解密一致性。可用線上工具產生。var ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now,
DateTime.Now.AddDays(1), false, Request.UserHostAddress);
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
{
Domain = ConfigurationManager.AppSettings["SSODomain"] // 如 ".example.com"
};
Response.Cookies.Add(cookie);
machineKey 一旦外洩,所有系統票據可被偽造。建議:評估風險後採用,或改用 OAuth/OpenID Connect 等現代 SSO 協定。