c# - 使用 Azure AD 时处理 Asp.Net MVC 中的 token 超时

标签 c# asp.net-mvc azure

这更多的是一个设计/方法问题......

我想我在这里遗漏了一些东西。我们正在构建一个 Asp.Net MVC 5 Web 应用程序,并使用以下场景通过 Azure AD 保护它:

https://azure.microsoft.com/en-us/documentation/articles/active-directory-authentication-scenarios/#web-browser-to-web-application

https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect

token /cookie 是绝对过期的,一小时后过期。那么这对用户体验有什么作用呢?无论如何,他们每个小时都必须重新登录?在我们的测试中,当用户过期时,浏览器将重定向回 AD,并提示用户输入凭据。当然,这会破坏我们加载部分 View 的任何 AJAX 调用,因此我们的 DevExpress 控件都不稳定。

基于对这篇 SO 帖子的回复:MVC AD Azure Refresh Token via ADAL JavaScript Ajax and KnockoutJs

...我所看到的是预期的吗?在我看来,对于用户整天登录并工作的云托管业务线应用程序来说,这似乎不是一个非常可行的解决方案。

我错过了什么吗?或者这对于商业应用来说不是一个理想的场景?

最佳答案

我们遇到了一系列类似的问题,对于如何在 session 超时时间如此短(60 分钟)的 Web 应用程序中将 Azure AD 与 ASP.NET MVC 结合使用也有相同的想法。

我们提出的解决方案似乎有效(尽管测试有限),即在页面上放置一个 iFrame,每 5 分钟刷新一次。

<iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms" id="refreshAuthenticationIframe" src="@Url.Action("CheckSessionTimeout", "Home", new { area = "" })" style="display:none;"></iframe>

“CheckSessionTimeout”页面基本上是空白的。

在整个应用程序引用的 Javascript 文件中,我们有:

var pageLoadTime = moment();

setInterval(refreshAuthenticationCookies, 1000);

function refreshAuthenticationCookies() {
    if (moment().diff(pageLoadTime, "seconds") > 300) {
        document.getElementById("refreshAuthenticationIframe").contentDocument.location = "/Home/ForceSessionRefresh";
        pageLoadTime = moment();
    }
}

(注意:moment 是我们使用的 JS 日期/时间库)。在家庭 Controller 上,我们有:

    public ActionResult CheckSessionTimeout() => View();

    public ActionResult ForceSessionRefresh()
    {
        HttpContext.GetOwinContext()
               .Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/Home/CheckSessiontimeout" },
                   OpenIdConnectAuthenticationDefaults.AuthenticationType);

        return null;
    }

我不确定这是否是最好的方法/方法。这只是我们能做的最好的事情,以解决 Azure AD 和 ASP.NET MVC 应用程序(不是 SPA,不使用 Web API,而是使用 Ajax 调用)的一系列困难约束,相对于我们的 future 对于执行 Kerberos 身份验证的本地应用程序来说,这一切都不重要(并且我们的用户期望 session 超时不是他们希望看到或担心的)。

关于c# - 使用 Azure AD 时处理 Asp.Net MVC 中的 token 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33467751/

相关文章:

asp.net-mvc - ASP.Net MVC - 使用外部 URL 进行表单例份验证

azure - 区域选择如何影响 Azure 静态 Web 应用上的 NextJS 应用程序

c# - 在 Asp.Net MVC 中使用静态变量是个好主意吗?

c# - 如何在图像按钮中将背景图像设置为无或其他默认值?

asp.net-mvc - MVC2 的 ASP.Net MVC future 刷新

.net - SqlServerSpatial110.dll 无法在 Windows Azure 部署上复制

azure - 我们如何使用 Microsoft Bot Framework 记录用户与机器人的对话?

c# - 检查 dbgeometry dbgeometry/dbgeography 点是否在多边形内

c# - 如何在 Excel 和 DataGridView 组件之间实现复制/粘贴行为?

asp.net-mvc - 如何将 Signal R 与 Angular 6 和 Asp.net MVC api 连接起来?