Как получить данные, связанные с пользователем spesifi c, с помощью JwtToken? - PullRequest
1 голос
/ 03 апреля 2020

Я хочу получить данные, которые принадлежат одному пользователю spesifi c. Если пользователь не авторизован, я хочу вернуть Unauthorized (). Как мне это сделать?

Вот мой текущий код (в настоящее время пользователь не обрабатывает вообще):

public async Task<IActionResult> GetById(int id, string token)
    {
        if (!ModelState.IsValid)
            return BadRequest();

        var entity = await Context.Set<T>().FindAsync(id).ConfigureAwait(false);

        if (entity == null)
            return NotFound();

        return Ok(entity);
    }

Сущность имеет отношение к пользователю в базе данных. А у пользователя есть свойство "JwtToken". Таким образом, можно выполнить entity.User.JwtToken.

Параметр "token" - это jwtToken, переданный в качестве заголовка из запроса GET.

1 Ответ

1 голос
/ 03 апреля 2020

Проверьте пользовательских политик авторизации . Вы можете создать собственную политику и продолжить с ней.

В другой заметке вы можете работать с токеном jwt, не сохраняя его в какой-либо базе данных. Рассмотрим следующий пример: блоги разработчиков Microsoft

  1. Токен JWT будет создан на этапе аутентификации
  2. Токен JWT будет зашифрован во время получения / отправки / put / delete команды из сети
  3. Ваш user.context может содержать данные и утверждения JWT (например, идентификатор пользователя)

Затем в своем коде вы можете сделать следующее:

    public async Task<IActionResult> GetById(int id, string token)
    {
        if (!ModelState.IsValid)
            return BadRequest();

        // Get your user id from your context here
        // Change the query to contain the user id
        var entity = await Context.Set<T>().FindAsync(id).ConfigureAwait(false);

        // If the user is authorized but there are no data for him
        // then a not found is the appropriate result
        if (entity == null)
            return NotFound();

        return Ok(entity);
    }

Вы не авторизованы для доступа к вызову, а не к данным. Данные просто не существуют для вас. Если вы вернетесь неавторизованным, вы дадите злоумышленнику знать, что данные существуют, чтобы они могли перечислять данные в вашей системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...