使用带有 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 duration
和 ASP.NET-Identity-Cookie-Authentication-Timeouts
这些方法好吗?
经过更多研究后,我发现这两个页面描述了一些可以很好地解决我的问题的选项:
Controlling a Web App’s session duration
和 ASP.NET-Identity-Cookie-Authentication-Timeouts
这些方法好吗?
我使用 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 duration 和 ASP.NET-Identity-Cookie-Authentication-Timeouts
这些方法好吗?
经过更多研究后,我发现这两个页面描述了一些可以很好地解决我的问题的选项: Controlling a Web App’s session duration 和 ASP.NET-Identity-Cookie-Authentication-Timeouts
这些方法好吗?