首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我应该在Asp.net WebAPI中的何处插入授权?

我应该在Asp.net WebAPI中的何处插入授权?
EN

Stack Overflow用户
提问于 2013-02-14 09:48:03
回答 1查看 7.8K关注 0票数 25

正如我所看到的,我有3个可能的地方在管道中插入我的东西

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1)     AuthorizationFilters

2)     Action Filters

3)     DelegatingHandler

最明显的是AuthorizationFilters,我可以用我的自定义授权属性来装饰我的操作/控制器。比方说..MyCustomAuthorizationAttribute

因为HTTP消息处理程序处于处理流水线的第一阶段。把它放进去有什么意义吗?

对我来说,现在的授权只意味着检查头部中的令牌,该令牌在身份验证后提供给客户端。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-14 10:42:55

更新2014年7月

我最初的回答涵盖了WebApi 1。在WebApi 2中有一些变化,即现在有了IAuthenticationFilter,这意味着您可以将身份验证逻辑移出DelegatingHandler,这会更优雅一些。

有一个Nuget项目here,它提供了IAuthenticationFilter的实现,并解释了其介绍的一些背景知识。

OWIN中间件现在可能是实现您的身份验证逻辑的最佳位置-在this blog post中间件中有一个证书身份验证here和基本身份验证OWIN的示例,前一个示例是首选的,因为它演示了基本AuthenticationHandler类的使用。

关于AuthorizationFilters的建议基本保持不变。

结束更新

通常..。

使用DelegatingHandler执行身份验证...也就是某人是谁。使用它来设置线程和用户上下文的原则,添加声明等。你也可以在这里放置授权逻辑,但在相当大的全球范围内。我个人总是使用AuthorizationFilters进行授权。

使用AuthorizationFilters将控制器和操作限制为特定人员。当您可以使用声明、主体、url或http请求参数中的信息来推断它们的权限时,就会使用它们。默认授权筛选器可用于限制匿名用户或按角色进行访问(如果设置在委托处理程序中)-显然,如果需要,您也可以实现自己的AuthorizationFilters。

当您需要使用消息内容进行授权决策时,偶尔使用ActionFilters。例如,您需要访问实体上的属性以确定它们是否具有访问权限(显然要小心这个(!))。

注意:

AuthorizationFilters在读取正文内容之前被调用,因此它们无权访问消息体来做出授权决策,这就是为什么使用ActionFilters,特别是OnActionExecuting偶尔会引发身份验证错误的原因。

So

在您的场景中,我将放入一个简单的DelegatingHandler来获取您的头并设置主体。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class CustomAuthenticationMessageHandler : DelegatingHandler
{


    public CustomAuthenticationMessageHandler ()
    {

    }

    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
                                                           CancellationToken cancellationToken)
    {
        Authenticate(request);

        return base.SendAsync(request, cancellationToken);
    }

    protected virtual void Authenticate(HttpRequestMessage request)
    {

        var authorisationHeader = request.Headers.Authorization;

        if (authorisationHeader == null)
        {
            return;
        }

        //Ensure you are happy with the header contents then

        {
            var principal = new GenericPrincipal(//new Identity , //Roles);
            Thread.CurrentPrincipal = principal;
            HttpContext.Current.User = principal;
        }

    }
}

然后使用AuthorizationFilters限制访问:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    [Authorize]
    public string Get()
    {

    }

    [Authorize(Roles = "Admin")]
    public string GetAdminOnly()
    {

    }

用于注册全局身份验证的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
config.MessageHandlers.Add(new CustomAuthenticationMessageHandler());

这意味着在每个请求中,主体将被设置为空或有效的身份。它不会处理授权,也就是不会拒绝对任何控制器或操作的访问。

开始保护资源

使用标准或自定义授权属性来定位受保护的控制器和操作。或全局注册:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
config.Filters.Add(new AuthorizeAttribute());

并且只使用[AllowAnonymous]属性将您希望不受保护的控制器和操作列入白名单。

如果只想在某些路由上进行身份验证,则为

然后,您可以稍微修改您的DelegatingHandler,以设置InnerHandler路由到正确的控制器,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public CustomAuthenticationMessageHandler(HttpConfiguration configuration)
{
       InnerHandler = new HttpRoutingDispatcher(configuration);
}

然后,您可以在路由上指定此处理程序,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "myurl",
            defaults: new {},
            constraints: new {},
            handler: new CustomAuthenticationHandler(config)
            );
票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14871925

复制
相关文章
ASP.NET WebAPI 中的参数绑定
当 WebAPI 调用 Controller 上的方法时, 必须为其参数赋值, 这个过程就是参数绑定。 本文介绍 WebAPI 如何绑定参数, 以及如何进行自定义。
beginor
2020/08/10
2.6K0
ASP.NET Core WebApi
此时Startup的Configure、ConfigureService方法中如下:
拓荒者IT
2019/09/24
9100
ASP.NET Core WebAPI 中处理 Patch 请求
PUT 和 PATCH 方法用于更新现有资源。它们之间的区别是,PUT 会替换整个资源,而 PATCH 仅指定更改。
郑子铭
2023/08/29
2890
ASP.NET Core WebAPI 中处理 Patch 请求
Asp.Net WebApi在swagger中添加版本控制
在Asp.Net WebApi中添加版本控制,同时在swagger中按版本显示接口
用户6362579
2020/06/11
2.2K0
ASP.NET Core 2.1中基于角色的授权
Identity是一个会员资格系统,它允许我们将登录功能添加到我们的应用程序中,身份可能属于一个或多个角色。例如,“User1”属于“Admin”角色,“User2”属于“HR”的角色。 我们可以在我们的MVC或者Web API应用程序中的控制器上使用AuthorizeFilter特性来控制用户的访问。基于角色的授权可以检查登陆的用户是否有访问页面的权限。这里开发人员可以在他们的代码中加入角色。 下面我们使用一个例子来进行说明,我们将创建三个角色,对应的我们将建立三个用户。代码如下:
依乐祝
2018/09/18
1.4K0
ASP.NET Core 2.1中基于角色的授权
WebAPI 微信小程序的授权登录以及实现
  https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
明志德道
2023/10/20
9260
WebAPI 微信小程序的授权登录以及实现
ASP.NET Core 中jwt授权认证的流程原理
那么,如何使用 C# 的 HttpClient 访问一个 JWT 认证的 WebAPI 呢?
痴者工良
2021/04/26
2.5K0
Asp.Net WebApi核心对象解析(一)
本文主要介绍了ASP.NET Web API的背景、使用方法和核心对象,包括HttpRequestMessage、HttpResponseMessage、HttpClient等,并分析了如何使用这些对象来处理HTTP请求和响应。
彭泽0902
2018/01/04
4.5K0
Asp.Net WebApi核心对象解析(二)
彭泽0902
2018/01/04
3.1K0
版本化ASP.NET Core WebApi
大部分使用Web API的网站都会使用版本化Web API,这是因为当我们升级Web API的时候并不能保证所有的客户端使用的都是最新的Web API,有些旧版本的客户端很有可能使用的某个甚至某几个在新的Web API 中已经废除的接口。如果这时我们部署新的Web API的话,旧版本的客户端就无法使用了。因此Web API 的版本化就出来了。下面我们就来一步一步的实现Web API的版本化。 首先我们需要引如Microsoft.AspNetCore.Mvc.Versioning包,通过 Visual Studio的nuget安装即可。当包成功添加到项目之后,就需要在 Startup的ConfigureServices方法中将ApiVersioning注入到容器中,代码如下:
喵叔
2021/11/17
4570
ASP.NET WebAPI 测试文档 (Swagger)
SwaggerUI是一个简单的Restful API测试和文档工具。简单、漂亮、易用(官方demo)。通过读取JSON配置显示API .项目本身仅仅也只依赖一些html,css,js静态文件.你可以几乎放在任何Web容器上使用
HueiFeng
2020/02/12
1.8K0
Asp.Net WebAPI核心对象解析(三)
该文章介绍了.NET 4.5之前和之后版本对HTTP编程模型的不同之处,主要从请求和响应方面进行对比,并分析了.NET 4.5版本对HTTP编程模型的改进和优化。
彭泽0902
2018/01/04
3K0
Asp.Net WebAPI核心对象解析(三)
[WCF权限控制]ASP.NET Roles授权[上篇]
在采用Windows认证的情况下,使用基于Windows用户组安全主体权限模式是一个不错的选择。我们可以直接使用现有的用户组设置,也可以为相应的应用或服务创建单独的用户组。但是,由于该模式对Windows认证的依赖,意味着这种模式只能使用于局域网环境中。如果采用证书和Windows帐号的映射,也可以适用于像B2B这样的外部网环境。在其他的网络环境中,基于Windows用户组的授权方式将会无能为力。此外,还具有这样一种状况:即使是在同一个局域网环境中,并且也采用Windows进行客户端认证,但是我们不想创建太
蒋金楠
2018/01/16
1.1K0
[WCF权限控制]ASP.NET Roles授权[下篇]
在采用Windows认证的情况下,使用基于Windows用户组安全主体权限模式是一个不错的选择。我们可以直接使用现有的用户组设置,也可以为相应的应用或服务创建单独的用户组。但是,由于该模式对Windows认证的依赖,意味着这种模式只能使用于局域网环境中。如果采用证书和Windows帐号的映射,也可以适用于像B2B这样的外部网环境。在其他的网络环境中,基于Windows用户组的授权方式将会无能为力。此外,还具有这样一种状况:即使是在同一个局域网环境中,并且也采用Windows进行客户端认证,但是我们不想创建太
蒋金楠
2018/01/16
1K0
ASP.NET Core策略授权和 ABP 授权
Github 仓库源码地址 https://github.com/whuanles/2020-07-12
痴者工良
2021/04/26
2.3K0
Asp.Net WebAPI 通过HttpContextBase获取请求参数
WEBAPI中的Request是HttpRequestMessage类型,不能像Web传统那样有querystring和from 方法接收参数,而传统的HttpReqest的基类是HttpReqestBase
全栈程序员站长
2022/07/05
2.2K0
Asp.Net WebAPI 通过HttpContextBase获取请求参数
在 Asp.Net Core WebAPI 中防御跨站请求伪造攻击
跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。[1] 跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
beginor
2020/08/10
2K0
【源码解读】Vue与ASP.NET Core WebAPI的集成
在前面博文【Vue】Vue 与 ASP.NET Core WebAPI 的集成中,介绍了集成原理:在中间件管道中注册SPA终端中间件,整个注册过程中,终端中间件会调用node,执行npm start命令启动vue开发服务器,向中间件管道添加路由匹配,即非 api 请求(请求静态文件,js css html)都代理转发至SPA开发服务器。
DDGarfield
2022/06/23
7500
【源码解读】Vue与ASP.NET Core WebAPI的集成
.net 温故知新【12】:Asp.Net Core WebAPI 中的Rest风格
RPC RPC(Remote Procedure Call),远程过程调用),这种RPC形式的API组织形态是类和方法的形式。所以API的请求往往是一个动词用来标识接口的意思,比如 https://
SpringSun
2023/07/24
3290
.net 温故知新【12】:Asp.Net Core WebAPI 中的Rest风格
ASP.NET WebAPI 路由规则与POST数据
Multiple actions were found that match the request:
liulun
2022/05/09
8050
ASP.NET WebAPI 路由规则与POST数据

相似问题

asp.net webapi动态授权

11

WebApi中的授权

20

使用Asp.Net核心WebAPI的授权

38

WebAPI授权

17

Asp.net WebApi中仅对授权属性的自定义授权

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文