首页 > 解决方案 > AuthorizeAttribute 在 ASP.net Core 中返回自定义值(无覆盖)

问题描述

我正在使用 ASP.NET Core 5.0 并制作 REST API。我还使用 JWT 令牌进行身份验证。

[Authorize]
public class LoginController : Controller

我已经为 JWT 添加了授权/身份验证中间件。如果身份验证失败,如何让 AuthorizeAttribute 返回自定义值?目前,它这样做:

Authorize Good token: nothing
Authorize Bad token: Return status 401/403

但我希望它做这样的事情,它返回 200 OK 但正文中有 JSON 响应,因为需要与我的其他响应保持一致并且对浏览器友好

Authorize Good token: nothing
Authorize Bad token: 200 OK <json>

这是我将用于我的 JSON 的模板

{
   succeeded: boolean
   statusCode: number //http status code
   response: array of strings //general info such as errors
}

注意:我已经创建了自定义身份验证策略。我只需要它返回一个我不知道该怎么做的唯一值。

标签: c#asp.net-core

解决方案


好吧,这不是很漂亮(就其位置而言),但应该可以正常工作:

.AddJwtBearer(options =>
{
    // ...

    options.Events = new JwtBearerEvents()
    {
        OnAuthenticationFailed = ctx =>
            ctx.Response.WriteAsJsonAsync(new
            {
                suceeded = false,
                statusCode = yourStatusCode,
                response = yourStringArray
            })
    };

    // ...
}

可能你已经掌握了它的要点。您可以为各种 JWT 令牌身份验证事件设置处理程序。WriteAsJsonAsync()自动设置 200 状态码和 applicaton/json 内容类型。但是您也可以使用 编写一个字符串WriteAsync(),并设置自定义状态代码和内容类型。


推荐阅读