Как вручную проверить, действителен ли json web token? - PullRequest
0 голосов
/ 06 сентября 2018

Я бы хотел определить, является ли токен JWT действительным в [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] и просто возвращает неавторизованный (по умолчанию) или OK (из кода)

1 Ответ

0 голосов
/ 06 сентября 2018

Вы можете попробовать ниже код

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; 
}
...