she*_*rtu 5 c# asp.net-core razor-pages
我无法在ASP .NET Core中实现基于策略的授权,以执行剃须刀页面上的操作。
我通读了有关授权的详尽文档,并以其示例为指导。
剃刀页面动作代码:
[Authorize(Policy = "test")]
public async Task<IActionResult> OnGetCreateAsync(string id)
Run Code Online (Sandbox Code Playgroud)
服务配置中的代码:
_ = services.AddAuthorization(options => {
options.AddPolicy("test", policy =>
policy.RequireAssertion(context =>
false));
});
Run Code Online (Sandbox Code Playgroud)
我希望如果我调用动作或端点服务,例如
GET /Account?handler=Create
Run Code Online (Sandbox Code Playgroud)
那么该请求将以403状态响应被拒绝,因为“测试”策略指出每个人都是未经授权的。但是,在实际中,该操作已成功调用。
另一种解决方案是通过 if 子句检查身份验证。如下所示:
if (!HttpContext.User.Identity.IsAuthenticated)
{
return Redirect("/Front/Index");
}
Run Code Online (Sandbox Code Playgroud)
您roles也可以通过查找角色来检查它:
var user = await _userManager.FindByEmailAsync(model.Email);
var roles = await _userManager.GetRolesAsync(user);
Run Code Online (Sandbox Code Playgroud)
我建议遵循 ASP.NET Core 中的 Razor Pages 授权约定,如下所示:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Run Code Online (Sandbox Code Playgroud)
在您的策略情况下,test它看起来像这样:
options.Conventions.AuthorizePage("/Account", "test");
Run Code Online (Sandbox Code Playgroud)
来源:
支持授权属性,但仅限PageModel于此:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace PageFilter.Pages
{
[Authorize]
public class ModelWithAuthFilterModel : PageModel
{
public IActionResult OnGet() => Page();
}
}
Run Code Online (Sandbox Code Playgroud)
来源:
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |