gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:31:21 25 4
gpt4 key购买 nike

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

我想我在这里遗漏了一些东西。我们正在构建一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com