Jas*_* P. 11 c# asp.net-mvc azure
这更像是一个设计/方法问题......
我想我在这里遗漏了一些东西.我们正在构建一个Asp.Net MVC 5 Web应用程序,并使用以下方案使用Azure AD保护它:
https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect
令牌/ cookie是绝对到期,并在一小时后到期.那么这对用户体验有何影响?无论如何,他们每小时都必须重新登录?在我们的测试中,当用户过期时,浏览器将重定向回AD并提示用户输入凭据.当然,这会破坏我们加载部分视图的任何AJAX调用,因此我们的DevExpress控件都不会稳定.
基于对此SO帖子的响应: 通过ADAL JavaScript Ajax和KnockoutJs的MVC AD Azure刷新令牌
......我所看到的是预期的?在我看来,对于用户登录并全天工作的云托管业务线应用程序来说,这不是一个非常可行的解决方案.
我错过了什么吗?或者这不是商业应用程序的理想方案?
小智 9
我们遇到了类似的问题,以及如何在具有如此低的会话超时(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>
Run Code Online (Sandbox Code Playgroud)
"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();
}
}
Run Code Online (Sandbox Code Playgroud)
(注意:时刻是我们使用的JS日期/时间库).在Home控制器上,我们有:
public ActionResult CheckSessionTimeout() => View();
public ActionResult ForceSessionRefresh()
{
HttpContext.GetOwinContext()
.Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/Home/CheckSessiontimeout" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
return null;
}
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是最好的方式/方法.这是我们能够做的最好的事情来修复Azure AD和ASP.NET MVC应用程序(不是SPA,不使用Web API但使用Ajax调用)的一系列困难约束,相对于我们即将到来的地方对于使用Kerberos身份验证的本地应用程序而言,这一点都不重要(而且我们的用户希望会话超时不是他们想要看到或担心的).
| 归档时间: |
|
| 查看次数: |
6668 次 |
| 最近记录: |