Я новичок в Сиро. Мы пытаемся использовать Сиро с Stormpath. Я пытаюсь проанализировать примеры, чтобы найти решение того, что я хочу сделать, но пока я не увенчался успехом.Shiro/Stormpath через REST
На данный момент я просто пытаюсь создать службы REST, чтобы делать то, что хочу, и позже свяжу реального клиента. Это то, чего я пытаюсь достичь в качестве своего первого шага:
Я хочу, чтобы клиент ударил конечную точку REST (логин) на моем сервере. Мой сервер будет аутентифицироваться и вернуть JWT клиенту. Этот JWT затем будет использоваться для доступа к защищенным конечным точкам на моем сервере. (Я написал код Java, который может успешно пройти проверку на Stormpath).
Моя проблема - JWT. Я ожидал, что JWT будет создан для меня или, по крайней мере, легко доступен. Я не могу найти способ его получить. Я видел пример кода о том, как его создать, но это не похоже на то, как я ожидал бы его приобрести.
Я провел несколько примеров, но большинство из них, похоже, имеет дело с интерфейсами JSP, и я не могу сделать прыжок к тому, что я пытаюсь сделать.
Этот подход разумный? Любые рекомендации приветствуются.
Edit 1
теперь у меня есть клиент, Java, которые могут проходить проверку подлинности с помощью сервлета Shiro и извлечения JWT. У меня это работает как развернутое приложение (war) в GlassFish. Следующим моим шагом будет использование этого JWT для аутентификации против другого приложения с моими конечными точками REST. Это приложение REST не нуждается в знании об аутентификации - я просто хочу передать JWT в вызове данной конечной точке REST и использовать Shiro (через аннотации) для контроля доступа к конечной точке (если это действительно возможно). Все примеры, которые я могу найти, кажутся примерами «все-в-одном» (объединение JSP с конфигурациями Shiro/Stormpath и т. Д.). Я пытаюсь определить минимальную рабочую конфигурацию для защиты конечных точек REST, и мне трудно определить, какие части конфигурации мне нужны.
Edit 2
Я использую Stormpath-Сиро-сервлет (украденный из примера Shiro Servlet), как моя аутентификации фоновая. Используя мой Java-клиент, я отправляю запрос на регистрацию на сервлет, и я действительно получаю JWT. Однако я не могу успешно использовать JWT для доступа к другим остальным ресурсам. Мои остальные вызовы приводят к ошибке:
org.apache.shiro.authz.UnauthenticatedException: This subject is anonymous - it does not have any identifying principals and authorization operations require an identity to check against. A Subject instance will acquire these identifying principals automatically after a successful login is performed be executing org.apache.shiro.subject.Subject.login(AuthenticationToken) or when 'Remember Me' functionality is enabled by the SecurityManager. This exception can also occur when a previously logged-in Subject has logged out which makes it anonymous again. Because an identity is currently not known due to any of these conditions, authorization is denied.
Во-первых, я не понимаю, почему сервлет «Логин» на самом деле не войти меня и дать мне неанонимный принцип? Во-вторых, я пытаюсь сделать все на отдельном клиенте, поэтому у меня нет доступа к Subject.login (это правильное предположение?).
Как выглядит ваш запрос по проводу? Можете ли вы запечатлеть его и опубликовать здесь (цензура при необходимости)? –
Я снова застрял. Я нажимаю сервлет на обоих/login и/oath/token. Я получаю ответ назад, и он выглядит отлично в том смысле, что мой URL-адрес учетной записи Stormpath верен. Я предполагаю, что это означает, что моя конфигурация верна, потому что URI учетной записи должен быть возвращен с сервера Stormpath. Но я не вижу никаких групп или претензий. Я проверил JWT с отладчиком JWT и анализатором JWT и инспектором. У меня есть 'stormpath.web.oauth2.authorizer.secure.resolver = com.stormpath.sdk.servlet.config.SecureResolverFactory' настроенный, если это фактор. –