ste*_*lla 2 c# cookies asp.net-core-mvc asp.net-core asp.net-core-1.0
这个问题与这里的问题基本相同,但是,对于asp.net核心,同时使用asp.net核心cookie中间件.
是否可以在验证时访问查询字符串/请求正文数据,如果是,您会鼓励这个想法吗?看来,根据这一点,它很可能是大男孩asp.net中的相同规则(例如你只是在给定的请求生命周期中读取一次请求数据)?
示例:我正在创建一个应用,其中人们拥有一个帐户,但是,他们是不同团队的成员.他们可以在应用程序中执行许多不同的操作,并且他们可以在一个团队或其他成员的"上下文"中执行该操作.所以,我在向服务器发出的请求中传递了一个teamId整数.我想从ClaimsPrincipal中提出索赔,确认他们确实是管道授权部分中该团队的成员.
正如您所说,可以访问请求的OnValidatePrincipal事件数据.所以,你可以写这样的东西:
OnValidatePrincipal = async (context) =>
{
if (context.Request.Path.Value.StartsWith("/teams/"))
{
var teamId = // get team id from Path;
if (user is not team member)
{
context.Response.StatusCode = 403;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我认为您的要求是相关的,Authorization而不是Authentication.我会Policy-Based Authorization用来处理这个要求.示例策略应该是这样的:
要求和处理程序:
public class TeamMemberHandler: AuthorizationHandler<TeamMemberRequirement>
{
private readonly IActionContextAccessor _accessor; // for getting teamId from RouteData
public TeamMemberHandler(IActionContextAccessor accessor)
{
_accessor = accessor;
}
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, TeamMemberRequirement requirement)
{
var teamId = // get teamId with using _accessor
if (user is not member of team(by teamId))
{
context.Fail();
}
return Task.FromResult(0);
}
}
public class TeamMemberRequirement : IAuthorizationRequirement
{
}
Run Code Online (Sandbox Code Playgroud)
配置服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddAuthorization(options =>
{
options.AddPolicy("TeamMember",
policy => policy.Requirements.Add(new TeamMemberRequirement()));
});
services.AddSingleton<IAuthorizationHandler, TeamMemberHandler>();
}
Run Code Online (Sandbox Code Playgroud)
最后在控制器上使用它(或者,如果需要,可以全局添加过滤器)
Authorize[(Policy = "TeamMember")]
public class TeamHomeController : Controller
{
// Authorize[(Policy = "AnotherPolicy")]
public IActionResult Index(){}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1903 次 |
| 最近记录: |