Токен доступа для анонимных пользователей — JWT

Я проводил исследования, чтобы перейти на систему авторизации, поддерживаемую сообществом, а не на ту, которую я создал. Я совершил ошибку, перестроив колесо вместо того, чтобы внедрить систему, управляемую сообществом, в которой используются лучшие практики. Однако я не смог найти ни одного примера авторизации с JWT, а не с аутентификацией.

Я открыт для всех предложений. Насколько я мог найти, JWT и OAuth требуют, чтобы клиенты имели существующую учетную запись и аутентифицировались для получения токена. Однако мне нужны следующие функции в моем приложении.

  • Анонимные пользователи должны получить токен доступа и иметь возможность получать некоторые ресурсы. Я должен уметь распознавать этих гостевых клиентов и хранить для них данные сеанса.
  • Гостевые пользователи должны иметь возможность войти в систему, а затем, возможно, получить новый токен или обновить свой уровень доступа, чтобы запрашивать ограниченные ресурсы и выполнять операции, предназначенные только для участников.

Я собираюсь создать этот проект с помощью Laravel 5.1 и AngularJS. Все предложения очень ценятся. Я действительно мог бы использовать некоторые указания по этому поводу, и простых ссылок на документацию было бы достаточно.


person Ilyas Serter    schedule 02.07.2015    source источник
comment
У меня такой же вопрос. Как я могу выпустить действительный токен, который может извлекать определенные данные из моих конечных точек API, но только до тех пор, пока у них есть действительный анонимный токен.   -  person timbrown    schedule 06.07.2015
comment
У меня такой же вопрос. Как авторизовать мультитенантное приложение как для анонимных пользователей, так и для пользователей с помощью JWT...   -  person Leon    schedule 27.11.2015
comment
то же самое. Вам нужно защитить хотя бы свой API входа в систему! См. security.stackexchange.com/questions /59411/. Я борюсь с предполагаемой системой авторизации поддержки сообщества. ИМХО не существует...   -  person Paul S    schedule 09.11.2017
comment
Нельзя ли сгенерировать токен для анонимного пользователя? Все, что делает JWT, — это проверяет правильность подписания переданного документа. Так что для начала просто войдите в систему как пользователь «анонимно».   -  person Andrew T Finnell    schedule 09.04.2018


Ответы (2)


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

От Существующего случайного пользователя:

// grab some user
$user = User::first();

$token = JWTAuth::fromUser($user);

Или из пользовательских претензий:

$customClaims = ['foo' => 'bar', 'baz' => 'bob'];
$payload = JWTFactory::make($customClaims);
$token = JWTAuth::encode($payload);

Вы можете получить более подробную информацию по следующей ссылке:

https://github.com/tymondesigns/jwt-auth/wiki/Creating-Tokens

person Yasser Mohammed ElSayed    schedule 08.03.2016

Я, конечно, понимаю вариант использования, который вы описываете, но я бы сказал, что анонимный токен на самом деле не добавляет никакой безопасности. Это связано с тем, что полностью анонимный пользователь сможет запросить анонимный токен без предварительной идентификации себя (иначе он не будет анонимным). Таким образом, предполагается, что этот токен должен принадлежат всем пользователям вашего приложения (включая пользователей со злым умыслом).

Хотя я не знаком с Laravel, общий подход к достижению такой функциональности может быть примерно таким:

Подход

  1. Найдите библиотеку сеансов, которая позволяет собирать информацию о пользователе перед входом в систему (я уверен, что большинство библиотек сеансов облегчат это).
  2. Создайте сеанс для каждого пользователя, который посещает приложение (в нем вы можете начать профилировать их, хранить полезную информацию и т. д.)
  3. Создайте разделение между authenticated конечными точками и anonymous конечными точками, требуя наличия действительного токена доступа в сеансе пользователя для получения/отправки данных тем, которые authenticated
  4. Когда пользователь «входит в систему», вы можете выполнить поток OAuth2.0/OIDC с выбранным вами поставщиком аутентификации, в конечном итоге получив токены.
  5. Сохраните токены в сеансе пользователя (фактически «обновив» его доступ), чтобы при следующей попытке попасть в конечную точку authenticated у них был доступ.

Главные примечания

  • Обязательно используйте постоянное хранилище для данных сеанса (обычно я бы использовал что-то вроде Redis), чтобы данные сеанса могли совместно использоваться экземплярами вашего приложения)
person Jack Dunleavy    schedule 03.03.2021