我尝试使用 startup.cs 中的以下代码保护我的.Net Core项目的 wwwroot 文件夹中的文件夹:
app.Use(async (context, next) =>
{
if (context.Request.Path.StartsWithSegments("/Users"))
{
if (context.User.Identities.Any(identity => identity.IsAuthenticated))
{
if (context.Request.Path.StartsWithSegments("/Users") && context.Request.Path.Value.LastIndexOf("/") > 0)
{
var clientID = Guid.Parse(context.Request.Path.Value.Split("/"[0])[2]);
if (context.GetClientID() != clientID && !context.User.IsInRole("Administrator"))
await context.Authentication.ForbidAsync();
else
await next();
}
else
await next();
}
else
await context.Authentication.ChallengeAsync();
}
else
await next();
});
在Visual Studio和IIS Express中一切正常但当我在IIS中将项目发布到生产时, context.User.Identities.Any(identity => identity.IsAuthenticated)始终返回假即可。即使我使用 context.User.Identity.IsAuthenticated ,它也会返回false。
但是,这会将用户重定向到登录页面,尽管他们已经重新登录,并且当用户登录时,它仍然有效。
这是我的cookie身份验证的代码:
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationScheme = CoreApplicationInfo.AuthenticationScheme,
LoginPath = new PathString("/login"),
CookieName = CoreApplicationInfo.ApplicationCookie,
CookieHttpOnly = true,
ExpireTimeSpan = TimeSpan.FromDays(1),
AutomaticAuthenticate = true,
AutomaticChallenge = true
});
任何人都可以帮我吗?
答案 0 :(得分:0)
首先:
创建www文件夹并找到一个文件。
下一步:(使用自己的代码指定路径)
[Authorize]
public IActionResult File()
{
return PhysicalFile(Path.Combine(environment.ContentRootPath, "www", "banner1.svg"), "image/svg+xml");
}
最好的问候。
https://medium.com/@tanaka_733/static-file-authorization-in-asp-net-core-mvc-26c1069073c1