Можно токен хранить, чтобы не дудосить сервис выдачи токенов по любому чиху. Например у access токена время жизни 15 минут, можно его в кэше подержать это время и переиспользовать этот токен пока не протух
Читать полностью…Всем привет. Подскажите как защитить сокеты? Я передаю jwt по заголовку (использую stomp) и там уже достаю его и проверяю самостоятельно. Может кто знает попроще что-нибудь, а то хотелось бы покрасивее как-то. В качестве единой системы входа использую keycloak
Читать полностью…>Знакомство где-то в одном из московских ресторанов
>А ты чем занимаешься?
>Я генерал DDL
ты юзаешь standalone builder, чтобы поднять контекст твоего контроллера
и похоже в этом контексте отсутсвует секьюрити контекст
Я конкретно только про Jwt говорил, как у тебя в примере.
Что касается тестового секьюрити контекста, лично я использовал @WithMockUser, либо для блэкбокс тестов свою фэктори для генерации тестовых JWT
Привет, возникло небольшое непонимание. Подскажите пожалуйста в реактивном программировании используется Netty и EventLoop с 1-2 потоками, а основная обработка бизнес логики идет на другом пуле потоков.
А в gRPC такая же модель или нет?
Ну у нас там был свой oauth2.0 сервер, самописный. Мы в редис клали токен при авторизации. Ключ и есть сам токен. В редисе все данные о юзере, необходимые микросервисам. Если в редисе нет токена - считаем, что юзер не авторизован и отвечаем 401. Дальше если что он на auth-сервере если что отрефрешится или заново авторизуется и токен появится.
Читать полностью…Ну в redis например можно искать токен, если его кто-то туда заранее положил... Но по сути те же яйца, только сбоку, не могу сказать что это проще. Мы так делали, но только потому что у нас токен разросся и в целом принято было решение не все в JWT пихать.
Читать полностью…Насколько помню, UserDetails создаётся только в случае с formLogin и basic, потому что информация о пользователях хранится на стороне нашего сервера, а не сервера авторизации
Читать полностью…Ты отправляешь мне ссылку на документацию, где ясно написано: many of authentication providers will create a UserDetails object as the principal, но many of, не значит все. Если ты посмотришь на то, что делают за тебя разные провайдеры аутентификации (например OAuth2LoginAuthenticationProvider и JwtAuthenticationProvider, разные провайдеры, но оба, как ни странно, работают с JWT) то узнаешь, что они создают разные токены (OAuth2AuthentciationToken и JwtAuthenticationToken соответственно). Каждый токен объект Authentication, но возвращает разные объекты при вызове метода getPrincipal (OidcUser и Jwt) и это не расширение интерфейса Principal. Общий интерфейс для них в приведённом случае ClaimAccessor. Именно поэтому в контракте метода и указан Object. Добавляя аннотацию AuthenticationPrincipal, Spring вероятно просто вызывает метод getPrincipal() у объекта аутентификации лежащего в SecurityContext и кастит ее к классу того параметра, который отмечен аннотацией. В моём случае, если указать UserDetails, будет вероятно просто ClassCastException. Ну и к слову сказать, разумеется я пробовал подставлять аннотацию AuthenticationPrincipal и очевидно это не работало. Проблема возникает именно в тестах, потому что при запуске всего контекста приложения все работает штатно и никаких ошибок нет. Поэтому я и пытаюсь узнать, какой компонент отвечает за инжект аутентификации внутрь метода контроллера
Читать полностью…