工作中遇到的情境,我们使用ADFS做认证,
实作方式是透过Microsoft.Owin.Security.WsFederation(ADFS端也设定了WsFederation),
同网路上众多教学一样,添加完下列内容,基本上就没太大问题
MetadataAddress = EpmsSettings.Default.AdfsMetadataAddress, Wtrealm = EpmsSettings.Default.AdfsWtrealm,
但最近遇到一个状况是,.AspNet.Federation此Cookie每一小时就会到期需要重新取得进行更新,
这边也确认过Cookie内容,其实到期时间是随着浏览时间结束才结束,
所以推测一小时此时间是AdfsMetadataAddress或adfs其中一项预设设定。
上网寻求万能google大神后亦有相同问题进行询问
https://social.msdn.microsoft.com/Forums/vstudio/en-US/0091bcb2-c86d-4d36-a845-102ac24c4e93/default-token-lifetime-for-relying-party-trusts?forum=Geneva
初步找到方向进行修改,先尝试过调整CookieAuthenticationOptions
new CookieAuthenticationOptions{ AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType, Provider = new CookieAuthenticationProvider { OnResponseSignIn = context => { context.Properties.ExpiresUtc = DateTimeOffset.UtcNow.AddHours(12); context.Properties.IsPersistent = true; } }});
经过验证发现并没有生效,Cookie仍是一小时之后会到期并替换
后来发现必须在WsFederationAuthenticationOptions加入UseTokenLifetime设定
WsFederationAuthenticationOptions
new WsFederationAuthenticationOptions { MetadataAddress = EpmsSettings.Default.AdfsMetadataAddress, Wtrealm = EpmsSettings.Default.AdfsWtrealm, UseTokenLifetime = false, ...
即可以顺利延长Cookie时间,避免Ajax时会有因Cookie到期而错误的状况出现
以上笔记