首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当用户未通过身份验证时,ASP.NET Core5Web API返回404代码,而不是401

当用户未通过身份验证时,ASP.NET Core 5 Web API返回404代码,而不是401代码。这是因为ASP.NET Core 5 Web API默认情况下使用了身份验证中间件,该中间件会将未经身份验证的请求视为匿名请求,并返回404代码而不是401代码。

404代码表示资源未找到,而401代码表示未经身份验证。返回404代码可以防止潜在的安全风险,因为它不会暴露未经身份验证的资源是否存在。这种行为可以防止恶意用户通过不断尝试不同的URL来探测系统中的资源。

然而,如果你希望在用户未经身份验证时返回401代码,你可以通过自定义身份验证中间件来实现。以下是一种可能的实现方式:

代码语言:txt
复制
public class CustomAuthenticationMiddleware
{
    private readonly RequestDelegate _next;

    public CustomAuthenticationMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        if (!context.User.Identity.IsAuthenticated)
        {
            context.Response.StatusCode = 401;
            return;
        }

        await _next(context);
    }
}

public static class CustomAuthenticationMiddlewareExtensions
{
    public static IApplicationBuilder UseCustomAuthentication(this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<CustomAuthenticationMiddleware>();
    }
}

然后,在Startup.cs文件的Configure方法中使用自定义身份验证中间件:

代码语言:txt
复制
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ...

    app.UseCustomAuthentication();

    // ...
}

使用自定义身份验证中间件后,未经身份验证的请求将返回401代码,而经过身份验证的请求将继续执行后续的中间件和处理程序。

请注意,以上示例只是一种实现方式,你可以根据自己的需求进行调整和扩展。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

5个REST API安全准则

开发REST API,从一开始就必须注意安全方面。 REST是通过URL路径元素表达系统中特定实体的手段。REST不是一个架构,而是一种在Web上构建服务的架构风格。...REST允许通过简单的URL(不是复杂的请求主体或POST参数)与基于web的系统交互。...5 - HTTP状态代码 HTTP定义了状态码。 设计REST API,不要只使用200成功或404错误。 以下是每个REST API状态返回代码要考虑的一些指南。...401授权 -错误或没有提供任何authencation ID /密码。 403禁止 -当身份验证成功,但身份验证用户没有权限使用请求的资源。 404未找到 -请求一个不存在的资源。...429太多的请求 -可能存在的DOS攻击检测或由于速率限制的请求被拒绝 (1)401和403 401授权”的真正含义未经身份验证的,“需要有效凭据才能作出回应。”

3.7K10
  • Node.js-具有示例API的基于角色的授权教程

    使用Node.js构建的教程 其他可用版本: ASP.NET: ASP.NET Core 3.1, ASP.NET Core 2.2 在本教程中,我们将通过一个简单的示例介绍如何在JavaScript...如果用户名和密码正确,则返回JWT身份验证令牌。...如果没有身份验证令牌,令牌无效或用户不具有“Admin”角色,则返回401未经授权的响应。...第二个中间件功能根据其角色检查经过身份验证用户是否有权访问请求的路由。如果验证或授权失败,则返回401未经授权响应。...重要说明:api使用“"secret”属性来签名和验证用于身份验证的JWT令牌,并使用您自己的随机字符串对其进行更新,以确保没有其他人可以生成JWT来获得对应用程序的授权访问。

    5.7K10

    ASP.NET Core Web API 集成测试中使用 Bearer Token

    在 ASP.NET Core Web API 集成测试一文中, 我介绍了ASP.NET Core Web API的集成测试. ...集成测试中使用Bearer Token 我这个项目里生产使用的是Identity Server 4, 进行集成测试使用Identity Server 4可能会不太方便, 所以我决定简化一下, 把这项工作就仅限制在...随后使用AddAuthentication()添加身份验证中间件, 并设置Bearer作为方案, 通过AddJwtBearer()进行一些参数配置....测试身份验证中间件 被测试系统使用了身份中间件: app.UserAnthentication(), 我们也可以测试一下这个中间件的功能, 如果Token不正确的话, 就应该返回401 UnAuthorized...这个测试代码很简单, 就是设置了一个不正确的token, 并Assert返回状态码是401. 该测试会通过: ? 文章略短, 就介绍到这.

    93930

    如何解决常见的 HTTP 错误代码

    服务器错误,或从 500 到 599 的 HTTP 状态代码 Web 服务器知道发生了错误或无法处理请求,它会返回。...清除浏览器的缓存和 cookie 可以解决这个问题 由于浏览器故障导致请求格式错误 手动形成 HTTP 请求由于人为错误导致的畸形请求(例如使用curl不正确) 401 授权 401 状态代码或Unauthorized...错误意味着尝试访问资源的用户尚未经过身份验证正确进行身份验证。...这意味着用户必须提供凭据才能查看受保护的资源。 返回 401 Unauthorized 错误的示例场景是,如果用户尝试访问受 HTTP 身份验证保护的资源,如本 Nginx 教程中所示。...文件权限 运行 Web 服务器进程的用户没有足够的权限读取正在访问的文件,通常会发生 403 错误。

    3.9K20

    Ocelot简易教程(五)之集成IdentityServer认证以及授权

    如果对ReRoute进行了身份验证,则Ocelot将在执行身份验证中间件时调用与其关联的认证方案。如果请求失败,则认证Ocelot返回http的状态代码401授权状态。...,首先访问一下http://localhost:1000/values 这时候返回的结果是401授权的状态,如下图所示: ?..."RouteClaimsRequirement": { "UserType": "registered" } 在此示例中,调用授权中间件,Ocelot将检查用户是否具有声明类型UserType...如果不是,则用户将不被授权,并且将响应403禁止访问的状态码。 当然这种授权的方式在大部分业务场景中都是不适用的,需要自己重写Ocelot的中间件才能实现。...访问相同的URL,但是我们要控制A,每分钟只能访问10次,B每分钟能访问20次,C不允许访问。针对这个场景Ocelot却没有相关的实现。但是我们可以通过重写Ocelot中间件来实现它。

    1.1K30

    ASP.NET Core 基础知识】--Web API--Swagger文档生成

    通过Swagger,用户可以生成具有交互式UI的实时API文档,便于团队协作和第三方开发者理解和使用API。它支持多种编程语言和框架,并提供了丰富的功能,如自动生成代码、请求示例和测试用例。...2.2 Swagger注解 Swagger注解是在ASP.NET Core Web API中使用Swagger通过特定的注解来增强和定制生成的API文档。...简洁明了的描述: 使用简洁明了的语言,避免使用过于复杂的术语,确保文档容易理解。 实例和示例代码: 提供详细的实例和示例代码,以演示API的使用方式。这有助于开发者更好地理解如何调用API。...// 如果用户未经授权,可以返回 403 Forbidden 或重定向到登录页 await next.Invoke(); }); API密钥和身份验证: 如果你的API需要身份验证,...return; } } await next.Invoke(); }); 上述代码将在访问Swagger UI检查用户是否已经通过身份验证,未通过身份验证返回401

    63200

    HTTP状态码列表

    [2] 且仅后续的请求所使用的方法是GET或者HEAD用户浏览器才可以在没有用户介入的情况下自动提交所需要的后续请求。...[31] 401 Unauthorized(RFC 7235) 参见:HTTP基本认证、HTTP摘要认证 类似于403 Forbidden,401语义即“认证”,即用户没有必要的凭据。...注意:网站(通常是网站域名)禁止IP地址,有些网站状态码显示的401,表示该特定地址被拒绝访问网站。 402 Payment Required 该状态码是为了将来可能的需求预留的。...与401响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交。如果这不是一个HEAD请求,而且服务器希望能够讲清楚为何请求不能被执行,那么就应该在实体内描述拒绝的原因。...资源被有意地删除并且资源应被清除,应该使用这个。在收到410状态码后,用户应停止再次请求资源。[39]但大多数服务端不会使用此状态码,而是直接使用404状态码。

    78230

    【 .NET Core 3.0 】框架之五 || JWT权限验证

    以上是JWT的官方解释,可以看出JWT并不是一种只能权限验证的工具,而是一种标准化的数据传输规范。所以,只要是在系统之间需要传输简短但却需要一定安全等级的数据,都可以使用JWT规范来传输。...app.UseStatusCodePages();//把错误码返回前台,比如是404 app.UseRouting(); app.UseAuthentication(); app.UseAuthorization...质询与应答的工作流程如下:服务器端向客户端返回401(Unauthorized,授权)状态码,并在WWW-Authenticate头中添加如何进行验证的信息,其中至少包含有一种质询方式。...标准:在Cookie认证中,用户登录返回一个302到登录页面,这在非浏览器情况下很难处理,Bearer验证则返回的是标准的401 challenge。.../SampleData/WeatherForecasts,将返回一个401: HTTP/1.1 401 Unauthorized Server: Kestrel Content-Length: 0 WWW-Authenticate

    2.1K30

    Spring Security 实战干货: 401和403状态

    今天来谈谈两个和认证授权息息相关的两个状态401和403以及它们如何在Spring Security融入体系中的。 2. 401 授权 我在RFC 7235[1]中找到了相关的表述。...客户端收到401状态码,表明了该请求因为缺乏了被信任的认证凭据被拒绝访问目标资源。 如果用户在请求中携带了认证凭据,那么401响应表明该凭据是授信的,不能访问目标资源。...403状态代码表示服务器已理解了客户端的请求,但拒绝授权。如果请求中提供了身份验证凭据,则服务器认为它们不足以授予访问权限。客户端不应自动携带相同的重复证书再次请求。...如果服务器认为这些反馈信息比较敏感,可以用404来代替。 4....仅仅登录认证失败返回401,其它情况的这两种异常都返回了403。 ? Spring Security异常处理体系 默认情况下他们都会被转发到异常页面。

    3.5K30

    「微服务架构」部署NGINX Plus作为API网关,第1部分

    但是,部署为API网关,使用JSON不是NGINX Plus的限制或要求; NGINX Plus与API本身使用的架构风格和数据格式无关。...幸运的是,修改API客户端不切实际,我们可以动态地重写客户端请求。...回应错误 HTTP API和基于浏览器的流量之间的主要区别之一是如何将错误传达给客户端。NGINX Plus作为API网关部署,我们将其配置为以最适合API客户端的方式返回错误。...第27行的指令指定当请求与任何API定义都不匹配,NGINX Plus会返回错误不是默认错误。...在这里,我们专注于API特定的身份验证方法。 API密钥身份验证 API密钥是客户端和API网关已知的共享密钥。它们本质上是作为长期凭证发布给API客户端的长复杂的密码。

    2K20

    使用ASP.NET Core 3.x 构建 RESTful API - 3.3 状态码、错误故障、ProblemDetails

    not allowed,尝试发送请求到资源的时候,使用了不被支持的HTTP方法,就会返回405状态码; 406 - Not acceptable,这表示API消费者请求的表述格式并不被Web...故障确实会对API整体的可用性造成影响。 ProblemDetails ASP.NET Core 大约在 2.1 版本的时候,它引入了 ProblemDetails。...ProblemDetails是基于 RFC7807 这个规范,目的是让 HTTP 响应可以携带错误的详细信息,不是返回一个错误的状态码。...在ASP.NET Core 3.x里面,同样也使用了 ProblemDetails。 看一个返回404的例子: ?...这是一个Get请求,但是并没有找到该资源,返回的状态码是404响应的body就是 ProblemDetails。

    1.6K20

    HTTP协议状态码详解(HTTP Status Code)

    使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为: 200 – 服务器成功返回网页 404 – 请求的网页不存在 503 – 服务不可用...401   (授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。 403   (禁止) 服务器拒绝请求。...407   (需要代理授权) 此状态代码401授权)类似,但指定请求者应当授权使用代理。 408   (请求超时)  服务器等候请求发生超时。...5xx(服务器错误) 这些状态代码表示服务器在尝试处理请求发生内部错误。 这些错误可能是服务器本身的错误,不是请求出错。...这是通过拦截HTTP流量,当用户试图访问网络返回一个重定向和登录,这很讨厌,但是实际情况就是这样的。 使用这些“拦截”客户端,会有一些讨厌的副作用。

    1.8K80

    ASP.NET Core 基础知识】--Web API--创建和配置Web API(二)

    以下是在 Web API 中读取资源的步骤: 在控制器中添加用于读取资源的 API 端点。通过接收 GET 请求,从数据库中获取资源,并将其返回给客户端。...成功删除后,通常返回204 No Content表示操作成功,但没有返回任何内容。通过这些步骤,你就能够在ASP.NET Core Web API中成功实现删除资源的功能。...三、添加身份验证与授权 在ASP.NET Core Web API中,添加身份验证与授权是确保API端点仅对经过身份验证和已授权的用户可用的重要步骤。...,[Authorize]特性要求对API端点的访问进行身份验证[Authorize(Policy = "RequireAdminRole")]则要求用户具有Admin角色。...通过这些步骤,你可以为ASP.NET Core Web API配置身份验证、实现授权策略,并保护API端点,确保只有经过身份验证且已授权的用户可以访问。请根据实际需求和安全要求调整上述代码

    21600

    flask 应用程序编程接口(API)最后一节

    分级系统 分级系统原则是说客户端需要与服务器通信,它可能最终连接到代理服务器不是实际的服务器。...对象查询的get_or_404()方法的英文以前见过的get()方法的一个非常有用的变行业释义体育,如果用户存在,报道查看它定给id的对象,ID不存在,它会中止请求并向客户端返回一个404错误,不是返回...API客户端收到401状态码,它知道它需要向用户询问凭证,但是它是如何实现的,服务器不需要关心。 用户模型中实现令牌 对于API身份验证需求,我将使用令牌身份验证方案。...在创建新令牌之前,此方法会检查当前分配的令牌在过期之前是否至少还剩一分钟,并且在这种情况下会返回现有的令牌。 使用令牌,有一个策略可以立即使令牌失效总是总是一件好事,不是仅依赖终止日期。...401错误在HTTP标准中定义为“授权”错误。HTTP客户端知道它们收到此错误时,需要重新发送有效的凭证。

    5K10

    ASP.NET MVC 随想录—— 使用ASP.NET Identity实现基于声明的授权,高级篇

    Identity 身份验证和基于角色的授权,中级篇 本文的示例,你可以在此下载和预览: 点此进行预览 点此下载示例代码 走进声明的世界 在旧的用户管理系统,例如使用了ASP.NET Membership...Identity 已经很好的集成到ASP.NET 平台中,HttpContext.User.Identity 属性返回一个 IIdentity 接口的实现,ASP.NET Identity 结合使用时...第一个原因是,应用程序能从多个来源获取声明,不是仅仅依靠本地数据库来获取。...最简单的是使用Role 声明来对Action 受限访问,这我们已经很熟悉了,因为ASP.NET Identity 已经很好的集成到了ASP.NET 平台中了,使用ASP.NET Identity ,...401 Unauthorize 然后OWIN 中间件重定向到Google 登陆页面,不是默认的Account/Login。

    2.3K80

    RESTful API 最佳实践(阮一峰)

    上面代码中,X-HTTP-Method-Override指定本次请求的方法是PUT,不是POST。 1.3 宾语必须是名词 宾语就是 API 的 URL,是 HTTP 动词作用的对象。...比如,/articles这个 URL 就是正确的,下面的 URL 不是名词,所以都是错误的。...400 Bad Request:服务器不理解客户端的请求,做任何处理。 401 Unauthorized:用户提供身份验证凭据,或者没有通过身份验证。...403 Forbidden:用户通过身份验证,但是不具有访问资源所需的权限。 404 Not Found:所请求的资源不存在,或不可用。...405 Method Not Allowed:用户已经通过身份验证,但是所用的 HTTP 方法不在他的权限之内。 410 Gone:所请求的资源已从这个地址转移,不再可用。

    2.8K20

    HTTP 返回状态值详解

    常有因为404错误页设置不当导致不存在的网页返回不是404导致搜索引擎降权。...401(授权)请求要求身份验证。对于登录后请求的网页,服务器可能返回此响应。   403(禁止)服务器拒绝请求。...407(需要代理授权)此状态码与 401(授权)类似,但指定请求者应当授权使用代理。如果服务器返回此响应,还表示请求者应当使用代理。   408(请求超时)服务器等候请求发生超时。   ...410(已删除)如果请求的资源已永久删除,服务器就会返回此响应。该代码与 404(未找到)代码类似,但在资源以前存在现在不存在的情况下,有时会用来替代 404 代码。...5xx(服务器错误)   这些状态码表示服务器在处理请求发生内部错误。这些错误可能是服务器本身的错误,不是请求出错。 500(服务器内部错误)服务器遇到错误,无法完成请求。

    3.1K30

    RESTful API 最佳实践(阮一峰)

    上面代码中,X-HTTP-Method-Override指定本次请求的方法是PUT,不是POST。 1.3 宾语必须是名词 宾语就是 API 的 URL,是 HTTP 动词作用的对象。...比如,/articles这个 URL 就是正确的,下面的 URL 不是名词,所以都是错误的。...400 Bad Request:服务器不理解客户端的请求,做任何处理。 401 Unauthorized:用户提供身份验证凭据,或者没有通过身份验证。...403 Forbidden:用户通过身份验证,但是不具有访问资源所需的权限。 404 Not Found:所请求的资源不存在,或不可用。...405 Method Not Allowed:用户已经通过身份验证,但是所用的 HTTP 方法不在他的权限之内。 410 Gone:所请求的资源已从这个地址转移,不再可用。

    1.6K41

    ASP.NET Core 2.0 建立规范的 REST API -- GET 和 POST

    这就有问题了,如果查询不到资源,那么返回的应该是404 NOF FOUND 不是200 OK....,表示API的消费者发送到服务器的请求是错误的 401 - Unauthorized,表示没有权限 403 - Forbidden,表示用户验证成功,但是该用户仍然无法访问该资源 404 - Not found...处理异常 Action发生异常的时候,默认情况下ASP.NET Core会返回500: ? ? 但还是自己处理一下比较好,可以在Action里面使用try catch: ?...注意,单个资源找不到就应该返回404空集合怎不是,这个前面也提过。 找到资源的结果: ? 找不到country或者city的时候都应该返回404,就不贴图了。...请求的media type不可用的时候,并且消费者不支持默认格式,这时服务器就应该返回 406 Not Acceptable 状态码。 ASP.NET Core 支持输出和输入两种格式化器。

    1.6K10
    领券