【发布时间】:2020-10-30 00:15:15
【问题描述】:
我是 .net 核心的新手,但已经在 asp.net 中开发了几年。我有一个核心站点,它是基于 Windows AD 的身份验证。我正在使用 AD 组来控制访问,我的 Razor 索引页面是为 AD 组设置的
[Authorize(Policy = "ADRoleOnly")]
当不属于该组的用户尝试访问 Razor 索引页面时,他们会收到 403 拒绝。我试图弄清楚如何将它们重定向到我设置为 "/unAuthAccess" 的剃须刀页面。此“/unAuthAccess”剃须刀页面设置为
[AllowAnonymous]
并且我验证了 AD 组中的用户可以正常查看此“/unAuthAccess”页面,以及不属于获得 403 的 AD 组的用户,因此 allowanonymous 适用于 /unAuthAccess 页面。
因此,当任何用户在无权查看时点击我使用该策略设置的任何页面时,我不知道在哪里或如何进行重定向。
[Authorize(Policy = "ADRoleOnly")]
我已经在 Startup.cs 中尝试了以下状态,同时具有 401 和 403 状态
app.UseStatusCodePages(async context =>
{
if (context.HttpContext.Response.StatusCode == 401)
{
app.Use(async (context, next) =>
{
context.Request.Path = "/UnAuthAccess";
await next();
});
}
});
这不起作用。所以我尝试了
app.UseStatusCodePagesWithRedirects("/Errors/{0}");
剃须刀页面设置为“/Errors/401”和“/Errors/403”,我不记得应该设置哪个页面并捕获用户的 unAuth 访问权限。
无论哪种方式,用户都不会被重定向到我的 razorpage,我只会收到标准的浏览器 HTTP 错误 403 拒绝消息。
只是寻求有关重定向如何在核心中工作的帮助???我应该以某种方式直接从剃刀页面cs/后端代码进行重定向吗?如果可以的话?
我使用 Global.asax 在旧的 asp.net 4.x 中工作,但这种方法在核心中不起作用:(
if (Response.StatusCode == 401 && Request.IsAuthenticated)
{
Response.Redirect("~/unauthAccess.aspx");
}
【问题讨论】:
-
你在使用
app.UseStatusCodePages的时候,有没有调试看到用户未授权时Response.StatusCode的值? -
so 调试,我在 Startup.cs 中的“if (context.HttpContext.Response.StatusCode == 401” 行设置了一个停止,它永远不会被命中,然后它就直接进入浏览器出现 403 错误
-
@mj1313 你的帖子让我坐下来重新开始我的思考过程:) 所以谢谢
标签: asp.net asp.net-core asp.net-core-3.1