托管在 Azure 上的点网 mvc 应用程序突然一次又一次地重定向到登录页面,直到重新启动
Posted
技术标签:
【中文标题】托管在 Azure 上的点网 mvc 应用程序突然一次又一次地重定向到登录页面,直到重新启动【英文标题】:Dot net mvc application hosted on Azure suddenly redirects to login page again and again until restarted 【发布时间】:2021-11-26 15:00:56 【问题描述】:我有 2 个Dot net mvc5
应用程序。 Azure
as Webapps 上托管的前端和 API 应用程序。前端应用程序在代码中有Azure AD
身份验证设置。下面是来自startup.auth.cs
文件的代码
var authority = string.Format("https://login.microsoftonline.com/0/v2.0", ConfigurationManager.AppSettings["TenantID"]);
var idClient = ConfidentialClientApplicationBuilder.Create(appId)
.WithRedirectUri(redirectUri)
.WithClientSecret(appSecret)
.WithAuthority(authority)
.Build();
var signedInUser = new ClaimsPrincipal(notification.AuthenticationTicket.Identity);
var tokenStore = new SessionTokenStore(idClient.UserTokenCache, HttpContext.Current, signedInUser);
try
string[] scopes = graphScopes.Split(' ');
var result = await idClient.AcquireTokenByAuthorizationCode(
scopes, notification.Code).ExecuteAsync();
var userDetails = await GraphHelper.GetUserDetailsAsync(result.AccessToken);
var cachedUser = new CachedUser()
DisplayName = userDetails.DisplayName,
Email = string.IsNullOrEmpty(userDetails.Mail) ?
userDetails.UserPrincipalName : userDetails.Mail,
Avatar = string.Empty,
AccessToken=result.AccessToken
;
MethodHelper methodHelper = new MethodHelper();
Dictionary<string, dynamic> authOutput = new Dictionary<string, dynamic>();
authOutput =await methodHelper.AuthorizeUserByEmailID(cachedUser.Email);
if (authOutput["Success"])
AuthenticatedUser authenticatedUserDetails = authOutput["AuthenticatedUser"];
if (authenticatedUserDetails != null&& authenticatedUserDetails.HasToolAccess)
AuthenticatedUser authenticatedUser = new AuthenticatedUser();
authenticatedUser = authOutput["AuthenticatedUser"];
cachedUser.UserID = authenticatedUser.UserId;
cachedUser.UserEmpId = authenticatedUser.UserEmpId;
cachedUser.DepartmentId = authenticatedUser.DepartmentId;
cachedUser.Department = authenticatedUser.Department;
tokenStore.SaveUserDetails(cachedUser);
else
string message = "User Details return null";
notification.HandleResponse();
notification.Response.Redirect($"/Home/Error?message=message&debug=message");
else
string message = authOutput["Exception"];
notification.HandleResponse();
notification.Response.Redirect($"/Home/Error?message=message&debug=message");
一旦应用程序成功接收到accesstoken
,它就会调用 API 登录方法来获取用户的其他详细信息
authOutput =await methodHelper.AuthorizeUserByEmailID(cachedUser.Email);
执行此任务。
当登录系统的用户数量较少时,这完全可以正常工作。但是白天突然。应用程序停止工作,所有用户一次又一次地重定向到登录屏幕。 Until the Web App is restarted
.
【问题讨论】:
【参考方案1】:请检查您的 web.config 中的 Forms 标签,您可能已经提供了 ~/Login 网址。
我在配置文件中将 LoginUrl 添加为 ~/Login 并观察到同样的问题,我已将重定向修改为“~/Index”,它起作用了对我来说很好。
如果您有或创建新的 Action 来处理此路由,请将配置中的表单 LoginUrl 更改为现有的 Index 路由 "~/Index"。
<authentication mode="Forms">
<forms loginUrl="~/Account/Index" name="AuthClientUser"
timeout="60" slidingExpiration="true" cookieless="UseCookies"
path="/">
</forms>
</authentication>
并将以下内容添加到 web.config 中的 appSettings 部分
<add key="autoFormsAuthentication" value="false" />
<add key="enableSimpleMembership" value="false"/>
web.config 的授权部分拒绝所有匿名用户。
【讨论】:
感谢您的回复 Harshitha 这是我的 cookie 配置代码 app.UseCookieAuthentication(new CookieAuthenticationOptions CookieSecure = CookieSecureOption.Always, CookieManager = new SystemWebChunkingCookieManager(), AuthenticationType = "Cookies", LoginPath = new PathString( "/Account/SignIn"), LogoutPath = new PathString("/Account/SignOut"), ExpireTimeSpan = TimeSpan.FromHours(2), SlidingExpiration = true, ); 我尝试了解决方案,但很遗憾没有奏效 请检查 web.config 的授权部分,拒绝所有匿名用户。以上是关于托管在 Azure 上的点网 mvc 应用程序突然一次又一次地重定向到登录页面,直到重新启动的主要内容,如果未能解决你的问题,请参考以下文章
从托管在 Azure 中的 Asp.net Core MVC Web App 获取“响应状态代码不表示成功:502(错误网关)”
静态托管 - Azure Azure CDN上的Azure Blob存储上的ReactJS应用程序
如何为托管在 Azure 上的 Web 应用程序和托管在窗口的 IIS 服务器上的 Web 应用程序使用相同的自定义域?