使用带有 ADAL 3 的 Azure AD 的 MVC 应用程序 - 身份验证 Cookie 在 1 小时后过期

MVC App using Azure AD with ADAL 3 - Authentication Cookie expires after 1 hour

我使用 Azure AD 和 OAuth 2 以及用于用户授权的 Open ID Connect 开发 MVC Web 应用程序。 当令牌在 60 分钟后过期(这很好)时,每个文档令牌都会自动刷新。 现在的问题是,要获取令牌,我需要知道存储在 cookie 中的当前经过身份验证的用户。获取Token的代码是这样的:

public async Task<AuthenticationToken> GetTokenForApplication(string resourceID)
{
   string signedInUserID = ClaimsPrincipal.Current.SignedinUserId(); 
    var tenantID = ClaimsPrincipal.Current.TenantId(); 
    string userObjectID = ClaimsPrincipal.Current.SignedinUserObjectId(); 

    // get a token for the Graph without triggering any user interaction (from the cache, via multi-resource refresh token, etc)
    ClientCredential clientcred = new ClientCredential(Config.ClientId, Config.AppKey);
    // initialize AuthenticationContext with the token cache of the currently signed in user, as kept in the app's database
    AuthenticationContext authenticationContext = new AuthenticationContext(string.Format("{0}{1}", Config.AadInstance, tenantID), new ADALTokenCache(signedInUserID));
    AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenSilentAsync(resourceID, clientcred, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));
    var token = new AuthenticationToken(authenticationResult.AccessToken) { ExpiresOn = authenticationResult.ExpiresOn };

    return token;
}

现在我进退两难,ClaimsPrincipal.Current.SignedinUserId() 方法调用抛出空引用异常。当我检查 ClaimsPrincipal.Current 对象时,没有关于登录用户的数据可用。但这是更新/请求令牌所需的信息。

MVC Web 应用程序的最佳实践是什么?有没有办法延长 cookie 的有效性,或者有什么方法可以在不重定向到 Web 应用程序的根页面的情况下重新验证​​当前用户?

经过更多研究后,我发现这两个页面描述了一些可以很好地解决我的问题的选项: Controlling a Web App’s session durationASP.NET-Identity-Cookie-Authentication-Timeouts

这些方法好吗?

经过更多研究后,我发现这两个页面描述了一些可以很好地解决我的问题的选项: Controlling a Web App’s session durationASP.NET-Identity-Cookie-Authentication-Timeouts

这些方法好吗?