Как можно получить JWT-токен внутри метода, помеченного атрибутом [AllowAnonymous]?

Как получить значение jwt токена доступа и id пользователя из заголовка в методе с атрибутом AllowAnonymous?
  • 22 сентября 2023 г. 14:27
Ответы на вопрос 1
В методе, помеченном атрибутом `[AllowAnonymous]`, вы не требуете аутентификации пользователя, поэтому вы не будете иметь доступа к JWT-токену прямо из заголовка запроса.

Как альтернативу можно рассмотреть несколько вариантов:

1. Если вы хотите получить доступ к JWT-токену внутри метода, помеченного атрибутом `[AllowAnonymous]`, вам придется вручную извлечь токен из заголовка запроса. Например, если вы используете ASP.NET Core, вы можете получить доступ к заголовкам запроса через объект `HttpContext`, который вы можете внедрить в ваш метод.

```csharp
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;

[AllowAnonymous]
[HttpGet]
public IActionResult MyAllowAnonymousMethod()
{
    // Получаем контекст HTTP запроса
    HttpContext httpContext = HttpContextAccessor.HttpContext;
    
    // Извлекаем значение токена из заголовка `Authorization`
    string token = httpContext.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").LastOrDefault();
    
    // Обработка значения токена
    
    return Ok();
}
```

2. Если вы хотите получить доступ к JWT-токену и ID пользователя, вы можете рассмотреть изменение кода вашего приложения, чтобы обрабатывать аутентификацию и авторизацию пользователей через JWT-токены. Тогда вы сможете использовать `[AllowAnonymous]` только для аутентификации пользователя, а затем получить доступ к JWT-токену и другим данным пользователя.

```csharp
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;

[Authorize]
[HttpGet]
public IActionResult MyAuthorizedMethod()
{
    // Получаем идентификатор аутентифицированного пользователя
    string userId = User.FindFirst("id")?.Value;
    
    // Получаем доступ к JWT-токену
    string token = HttpContext.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").LastOrDefault();
    
    // Обработка значения токена и ID пользователя
    
    return Ok();
}
```

В любом случае, важно обеспечить безопасность и надежность вашего кода, особенно при работе с JWT-токенами, поэтому рекомендуется тщательно проверять и обрабатывать значения токенов перед их использованием.
Похожие вопросы