.NET Core 授权模型:需要来自请求的上下文的策略

Posted

技术标签:

【中文标题】.NET Core 授权模型:需要来自请求的上下文的策略【英文标题】:.NET Core Authorization Model: Policies that require context from the request 【发布时间】:2017-05-30 18:57:12 【问题描述】:

我刚刚开始研究 .NET Core 安全模型。它似乎比以前的模型好得多(我真的很喜欢这个政策理念,角色非常有限 IMO)但文档似乎并没有涵盖我想做的事情......我希望我d like to do是可能的,但我不知道是不是。

我正在构建一个应用程序,用户可以在其中创建“组织”,并邀请其他用户加入。反之,用户也可以申请加入组织。

组织是应用程序的中心概念;几乎所有活动都是以组织为中心的,我想建立一个策略,在收到请求后,将验证当前用户是否有权访问他或她作为成员请求的组织资源。我会在每个请求中包含一个组织 ID。

我看到的问题是,似乎没有任何方法可以让策略“了解”请求的上下文,以便它可以检查组织 ID 并验证用户是成员那个组织的。是否存在这样的机制,或者政策概念不适合这种方法?

【问题讨论】:

【参考方案1】:

您可以使用 IHttpContextAccessor,将其注入您想要的任何位置并使用它来获取上下文。

在您的 Startup.cs 中:

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

和注入:

public class CustomClass 

     private readonly IHttpContextAccessor _contextAccessor;

     public CustomClass(IHttpContextAccessor contextAccessor) 
     
           _contextAccessor = contextAccessor;
     

【讨论】:

看起来 HttpContext 已经可以通过 context.Resource 获得了。问题是,这似乎发生在任何模型绑定或验证之前。呃,这和 AuthorizationActionFilters 一样丑陋。

以上是关于.NET Core 授权模型:需要来自请求的上下文的策略的主要内容,如果未能解决你的问题,请参考以下文章

.net core 微服务项目-介绍篇

.Net Core Web API,如果角色或策略匹配,则授权操作

经验分享在ASP.NET Core中,如果禁用某个请求的模型验证?

ASP.NET Core 中的模型绑定

根据 ASP.NET Core 请求标头中提供的 API 密钥授权用户

[Asp.Net Core]鉴权授权