如何手动检查 json web token 是不是有效?

Posted

技术标签:

【中文标题】如何手动检查 json web token 是不是有效?【英文标题】:How to manually check whether json web token is valid?如何手动检查 json web token 是否有效? 【发布时间】:2019-02-11 12:25:01 【问题描述】:

我想确定 JWT Token 在[AllowAnonymouse]] 端点中是否有效

编辑

我有一个端点,任何人(授权和未经授权的人)都可以访问,然后:如果该用户有 http 授权标头或者他在 cookie 中有令牌并且他的令牌有效,则将他重定向到 X,否则重定向到 Y

我的想法的伪代码:

[Route("Passport/")]
public IActionResult Passport()

    if (this.User.Identity.IsAuthenticated)
    or pseudocode:
    if (tokenIsValid(getJWTTokenFromHeader()));
    
        return RedirectToAction("Resources");
    
    else
    
        return RedirectToAction("Login");
    

我想过这样的事情:

[Route("Passport/")]
public IActionResult Passport()

    var token = ExtractTokenFromHeader();
    
    HttpClient client = new HttpClient();

    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue
    ("application/json"));

    client.DefaultRequestHeaders.Add("Authorization", $"Bearer token");
    
    var get = client.GetAsync($"http://localhost/verifyToken").Result;

    var responseBody = await get.Content.ReadAsStringAsync().ConfigureAwait(false);

    switch (get.StatusCode)
    
        case HttpStatusCode.Unauthorized:
            return RedirectToAction("Login");
        case HttpStatusCode.OK:
            return RedirectToAction("Resources");
        default:
            return RedirectToAction(...);
    

端点 verifyToken 有一个 [Authorize] 属性并且只返回 Unauthorized(默认)或 OK(来自代码)

【问题讨论】:

您能否详细说明,您的问题不清楚 我有一个端点,任何人(授权和未经授权的人)都可以访问,然后:如果该用户有 http 授权标头或者他在 cookie 中有令牌并且他的令牌有效,则将他重定向到 X 否则到Y 使用策略而不是在控制器方法中检查令牌:docs.microsoft.com/en-us/aspnet/core/security/authorization/… @aguafrommars 听起来不错,但我仍然需要确定令牌在HandleRequirement 中是否有效? 那么只使用if (this.User.Identity.IsAuthenticated)有什么问题? 【参考方案1】:

你可以试试下面的代码

private static bool ValidateJWTToken(string token, out string username)   
    username = null;  
    var simplePrinciple = JwtManager.GetPrincipal(token);  
    var identity = simplePrinciple.Identity as ClaimsIdentity;  
    if (identity == null) return false;  
    if (!identity.IsAuthenticated) return false; 

【讨论】:

以上是关于如何手动检查 json web token 是不是有效?的主要内容,如果未能解决你的问题,请参考以下文章

Json Web Token (JWT) 究竟是如何减少人在循环攻击的?

JSON Web Token 仅适用于具有 Eloquent 模型的 Laravel

JSON Web Token Auth Service - 检查单独服务器上的状态以保护路由。节点JS

json web based token在服务器端的验证流程

用户对象是不是应该存储在 JSON Web Token 中?

如何在不手动检查的情况下确定网站是不是使用 webassembly?