【问题标题】:How to throw a 401 Unauthorized Exception in .NET (JWT Validate Token)?如何在 .NET(JWT 验证令牌)中抛出 401 未经授权的异常?
【发布时间】:2018-03-06 15:16:50
【问题描述】:

我有一个 .NET 4.5 API 应用程序。它受 OWIN/Oauth 保护。我用 POSTMAN 打电话并伪造 Bearer 令牌,所以我可以测试这个案例。 validateToken函数发现JWT令牌被操纵/无效后如何中断代码执行?

ClaimsPrincipal principal = handler.ValidateToken(protectedText, _validationParameters, out validToken);

此行返回一个 SecurityTokenException。我像这样捕获异常:

catch (SecurityTokenException ex)
{
     var msg = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Access Token is manipulated" };
     throw new HttpResponseException(msg);
}

之后应用程序继续执行并进入我通过邮递员调用的 ApiController 的构造函数,该构造函数受 [Authorize] 保护,而不是给我一个带有 401 Unauthorized 的 HTTPResponse

附:这是ApiController中构造函数的代码

public class TicketController : ApiController
{
     private readonly TicketService _svcTicket;

     public TicketController()
     {
           try
           {
              _svcTicket = new TicketService(JwtFormat.AppContext);
           }
           catch (SecurityTokenException ex)
           {
                var msg = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Access Token is manipulated" };
                    throw new HttpResponseException(msg);
           }
           catch (Exception ex)
           {
                throw ex;
           }
       }
    }

【问题讨论】:

  • 这个函数的调用者是否捕获了 HttpResponseException?
  • 调用者是工具POSTMAN。我编辑了我的帖子并添加了 Api Controller 构造函数

标签: c# .net exception-handling jwt


【解决方案1】:

我发现了:

public class TicketController : ApiController
{
 private readonly TicketService _svcTicket;

 public TicketController()
 {
       try
       {
          if(tokenIsManipulated) {
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized)
                {
                    Content = new StringContent("Access Token is manipulated")
                });
          }
        }
        catch(HttpResponseException)
        {
            throw;
        }
   }
}

我的代码之前缺少两件重要的事情:

  1. 抛出时新的 HttpResponseMessage 对象
  2. HttpResponseException 的额外捕获块

【讨论】:

    猜你喜欢
    • 2018-04-22
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2018-06-06
    • 2021-09-21
    • 2013-03-07
    • 2021-09-28
    相关资源
    最近更新 更多