我有一个ASP.net WebForms应用程序,已根据本文将其配置为与Azure Active Directory和OpenIDConnect一起使用: http://www.cloudidentity.com/blog/2014/07/24/protecting-an-asp-net-webforms-app-with-openid-connect-and-azure-ad/
通常来说,它可以正常工作。但是有时候,在较长时间的不活动之后(例如,填写大表格),用户被重定向到应用程序的主页,并且他从表格中获得的数据会丢失。这当然很令人困惑。
似乎在某个时候会话(令牌?)到期了,需要重新进行身份验证。在重定向时,我能够跟踪到https://login.windows.net/ ...的HTTP 302。这样就可以证实我关于通过AAD重新认证的假设。
我不能确切地说出这种情况多久发生一次-对我而言,它似乎并不是固定间隔的。我试图通过删除Cookie AspNet.Cookies
和ASP.NET_SessionId
来重现此行为,但它没有引起重定向。与应用程序进行交互只是自动重新创建了这些cookie。
我的问题是:
答案 0 :(得分:0)
在您的初始化代码中,假设您已经按照所链接文章的说明进行操作,则这样一行,
app.UseCookieAuthentication(new CookieAuthenticationOptions());
将身份验证委派给身份提供程序时,您的应用程序仍会根据控制生存期的身份验证结果删除一些cookie。您可以根据需要调整这些设置。...例如
appBuilder.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType ="Cookies",
ExpireTimeSpan = TimeSpan.FromMinutes(60), // Expire after an hour
SlidingExpiration = true // use sliding expiration..
});
查看文档以了解您可以配置的内容-https://docs.microsoft.com/en-us/previous-versions/aspnet/dn385599(v%3Dvs.113)
此外,只要它认为需要与身份提供者进行交互,就会触发一个事件,该事件在OpenIdConnectAuthenticationOptions的Notifications对象下可用。您可能感兴趣的一种是 RedirectToIdentityProvider
private void ConfigureOpenIdConnect()
{
var openIdConnectAuthenticationOptions = new OpenIdConnectAuthenticationOptions
{
// the rest of your settings....then
Notifications =
new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider =
async context => await RedirectToIdentityProviderHandler(context)
},
UseTokenLifetime = false
};
}
private static Task RedirectToIdentityProviderHandler(
RedirectToIdentityProviderNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification)
{
// do some logging whenever you app is redirecting to the IDP
return Task.FromResult(0);
}
UseTokenLifetime在这里很有趣,因为您的身份令牌具有到期时间,并且默认情况下,应用程序中的cookie生命周期是令牌的生命周期。如果您想自己控制cookie的生存期(按照第一个代码段),请在此处将其设置为false并由您自己明确控制。
您可以结合使用以下方法:覆盖身份令牌生存期,更长的cookie生存期,将滑动过期设置为true以及在身份提供程序发生重定向时进行一些登录。
但是,显然,调整设置太多会增加攻击向量,因此请仔细考虑您的安全要求。
答案 1 :(得分:0)
您知道,通过AAD成功登录后,您将获得ID令牌。 ID令牌是具有到期时间的Jwt格式。您可以使用powershell更改ID令牌的生存期。请参阅本文档https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-configurable-token-lifetimes#access-token-lifetime。