Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
5 / 4 / 1
Регистрация: 15.12.2015
Сообщений: 255

Как настроить базовую авторизацию для не-web клиентов

06.04.2019, 15:52. Показов 1095. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь прикрутить авторизацию к скелету сервера, получается не особо)) Подскажите куда копать дальше. В интернетах все примеры для web клиентов, ввод логина с паролем идет через форму, а как сделать авторизацию для клиента на том же андроиде не понятно.
Суть в чем: отправляем с клиента запрос типа http://%address%:8081/auth?log... sword=pass, авторизируемся (или получаем сообщение об ошибке) и далее уже получаем доступ к тем запросам, которые требуют авторизации.

Контроллер:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@RestController
public class ApiController {
 
    @Autowired
    private CityRepository cityRepository;
 
    @GetMapping(path="/auth")
    public @ResponseBody
    BaseResponse userLogin(@RequestParam String email, @RequestParam String password) {
        // ???????
        return new BaseResponse("User not found", BaseResponse.CODE_ERROR);
    }
 
    @GetMapping(path="/auth/getCities")
    public @ResponseBody
    BaseResponse getCities(@RequestParam String name) {
        return new BaseResponse<>(cityRepository.findCityByName(name), BaseResponse.CODE_SUCCESS);
 
    }
 
    @GetMapping(path="/auth/getAllCities")
    public @ResponseBody
    BaseResponse getAllCities() {
        return new BaseResponse<>(cityRepository.findAllCites(), BaseResponse.CODE_SUCCESS);
 
    }
    
}


Конфиг:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Configuration
@EnableWebSecurity
public class SecurityConfig
    extends WebSecurityConfigurerAdapter {
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .authorizeRequests().antMatchers("/auth").permitAll()
            .and()
                .authorizeRequests().antMatchers("/auth/**").authenticated()
            .and()
                .httpBasic()
            .and()
                .sessionManagement().disable();
    }
 
}


Что нужно реализовать в методе userLogin() ?
Или я туплю и оно не так в принципе делается ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.04.2019, 15:52
Ответы с готовыми решениями:

Не использовать базовую авторизацию на локальной машине
Как отключить базовую авторизацию, когда работаешь над сайтом на локальной машине? Не заводя при этом отдельного htaccess. Нашёл...

Как настроить web.config для хостинга
Залил сайт на хостинг по FTP и столкнулся с этой ошибкой при вводе адреса сайта в адресной строке браузера: Runtime Error ...

Как настроить логи для виртуального хоста web-сервера?
Centos 6.3 Доброго времени суток! Возникла проблема: описал виртуальный хост в файле /etc/httpd/conf.d/dophost.conf прописал ему пути...

11
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
06.04.2019, 17:29
bobo96, Начать можно с https://www.baeldung.com/rest-... h2-angular в гугел => spring security oauth2 но тема довольно сложная... без определенной базы знаний разобраться будет не легко
0
5 / 4 / 1
Регистрация: 15.12.2015
Сообщений: 255
06.04.2019, 17:59  [ТС]
Про oauth2 читал, непросто так сходу, согласен, поэтому и начал с казалось бы более простого, с базовой.
Если кого не затруднит, покажите чего конкретно засунуть в userLogin(), что бы авторизировать пользователя ? Ибо пол дня сегодня читал интернеты, но кромер примеров с web ничего не видел, оттого и затык
0
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
06.04.2019, 19:40
Цитата Сообщение от bobo96 Посмотреть сообщение
но кромер примеров с web ничего не видел, оттого и затык
Попробуйте поразмышлять на тему "почему ваша хотелка в интернетах не находится" =)

Если вы хотите авторизацию для рест сервиса не изобретайте велосипедов гуглите по ключам oauth - jwt - rest api authorization

Добавлено через 2 минуты
bobo96, предположим вы добьетесь от login метода, того что вы хотите.. а дальше что? Вот позвал ваш клиент адрес "/auth/getCities" какие вы видите варианты идентифицировать пользователся который дернул этот метод?
0
5 / 4 / 1
Регистрация: 15.12.2015
Сообщений: 255
06.04.2019, 19:51  [ТС]
Цитата Сообщение от reisal78 Посмотреть сообщение
Если вы хотите авторизацию для рест сервиса не изобретайте велосипедов гуглите по ключам oauth - jwt - rest api authorization
Ок)
Цитата Сообщение от reisal78 Посмотреть сообщение
предположим вы добьетесь от login метода, того что вы хотите.. а дальше что? Вот позвал ваш клиент адрес "/auth/getCities" какие вы видите варианты идентифицировать пользователся который дернул этот метод?
Это уже следующий этап изучения))
0
5 / 4 / 1
Регистрация: 15.12.2015
Сообщений: 255
09.04.2019, 08:22  [ТС]
Здравствуйте!
Продолжу, если никто не против))
С авторизацией разобрался, правда пока не с oauth2, а с базовой, но тем не менее. Несколько тупых вопросов:
1. Те токены, которые выдает сервер клиенту, хранятся где-то на сервере ? Как ими управлять ? Т.е. сегодня я выдал токен, а завтра хочу забрать (удалить), как это сделать ? Погуглил, вроде-как каких-то стандартных механизмов нет, варинтов много. Как делать это правильно ?
2. Вопрос по самому токену. Понятно, что с его помощью сервер понимает, что запрос делает проверенный источник. Но запросы же можно перехватить, а потом плевать их серверу и так же получать ответы, не ?)) То-есть проще говоря как сервер определяет, что запрос делает тот клиент, которому он выдавал токен ?

з.ы. Вот эти статьи помогли разобраться, если кому вдруг будет интересно)
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.04.2019, 10:28
Цитата Сообщение от bobo96 Посмотреть сообщение
Как делать это правильно ?
вариантов действительно несколько. Выбирай любой. Тебе скорее всего ньюансы не принципиальны

Цитата Сообщение от bobo96 Посмотреть сообщение
Но запросы же можно перехватить
это называется MTIM attack. Используй HTTPS

Цитата Сообщение от bobo96 Посмотреть сообщение
как сервер определяет, что запрос делает тот клиент, которому он выдавал токен ?
никак. Если ты потерял ключи от квартиры, а кто-то их нашел, то этот кто-то без проблем сможет открыть дверь твоей квартиры.
Если очень хочется можно валидировать клиента, но тебе скорее всего ненужно.
0
5 / 4 / 1
Регистрация: 15.12.2015
Сообщений: 255
09.04.2019, 11:42  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Тебе скорее всего ньюансы не принципиальны
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
но тебе скорее всего ненужно.
А когда они будут принципиальными и нужными ?)) Если о них не знать, то, видимо, никогда. Но да ладно, это в интернетах есть.


По https подскажите пожалуйста: создал сертификат, положил его в resources, изменил application.properties
server.port = 5001
server.ssl.key-store= tomcat_demo.keystore
server.ssl.key-store-password= pass
server.ssl.keyStoreType= PKCS12
server.ssl.keyAlias= tomcat_demo
server.ssl.enabled = true
server.ssl.protocol = TLS
Приложение запускается нормально, без ошибок:
2019-04-09 13:07:49.257 INFO 10984 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 5001 (https)
Но при запросе https://localhost:5001/api/auth/signin postman говорит Could not get any response
Что не так делаю ?


Добавлено через 27 минут
Отбой, настройках postman'а выключил верификацию сертификата и все заработало.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.04.2019, 11:55
Цитата Сообщение от bobo96 Посмотреть сообщение
А когда они будут принципиальными и нужными
может быть никогда. Такого рода валидация не нужна в 90% систем.
1
5 / 4 / 1
Регистрация: 15.12.2015
Сообщений: 255
09.04.2019, 13:44  [ТС]
Еще вопрос: тот вариант развертывания сервера, который "из коробки", spring boot, можно использовать в конечных продуктах или нужно все это хозяйство как-то по-другому разворачивать ?

Добавлено через 1 час 35 минут
Непонятки с expiration time токена.
Выставил время жизни 15 минут
При входе создаем токен:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public String generateToken(Authentication authentication) {
 
        UserPrincipal userPrincipal = (UserPrincipal) authentication.getPrincipal();
 
        Date now = new Date();
        Date expiryDate = new Date(now.getTime() + jwtExpirationInMs);
        System.out.println("Curent time: " + new Date(new Date().getTime()));
        System.out.println("expiryDate: " + expiryDate);
 
        return token = Jwts.builder()
                .setSubject(Long.toString(userPrincipal.getId()))
                .setIssuedAt(new Date())
                .setExpiration(expiryDate)
                .signWith(SignatureAlgorithm.HS512, jwtSecret)
                .claim("TEST", "lololo")
                .compact();
    }
Вроде все ок:
Java
1
2
Curent time: Tue Apr 09 10:34:34 UTC 2019
expiryDate: Tue Apr 09 10:49:34 UTC 2019
Беру токен, который прилетел в ответ, иду с ним в закрытый раздел попутно вытаскивая id пользователя:
Java
1
2
3
4
5
6
7
8
9
10
11
12
    Long getUserIdFromJWT(String token) {
        Claims claims = Jwts.parser()
                .setSigningKey(jwtSecret)
                .parseClaimsJws(token)
                .getBody();
 
        System.out.println("Curent time: " + new Date(new Date().getTime()));
        System.out.println("Expiration time: " + claims.getExpiration());
        System.out.println("IssuedAt exp: " + claims.getIssuedAt());
 
        return Long.parseLong(claims.getSubject());
    }
И вот тут начинается какая-то дичь:
Java
1
2
3
Curent time: Tue Apr 09 10:35:01 UTC 2019
Expiration time: Mon Apr 15 09:46:31 UTC 2019
IssuedAt exp: Mon Apr 08 09:46:31 UTC 2019
Почему claims.getExpiration() на 6 дней перескочил ??
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.04.2019, 14:34
Цитата Сообщение от bobo96 Посмотреть сообщение
тот вариант развертывания сервера, который "из коробки", spring boot, можно использовать в конечных продуктах
можно
0
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 6
21.10.2020, 11:27
Здраствуйте не хочу создавать новую тему по этому спрошу здесь.
вот простой пример из web.xml работающий с tomcat теперь вопрос как переписать этот xml в java code.
Желательно не используя spring Security так как с xml он не использовался
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
<security-constraint>
        <web-resource-collection>
            <web-resource-name>Security</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>test</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>Example Basic Authentication</realm-name>
    </login-config>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.10.2020, 11:27
Помогаю со студенческими работами здесь

Как сделать авторизацию на web-ресурсе
Хочу сделать программу для просмотра состояния счета, кто подскажет как это можно выполнить.

C#, WEB API 2, OWIN. Как осуществить кросдоменную авторизацию?
Добрый день. У меня такая ситуация - есть 2 приложения asp .net web api 2 1. Первое приложение, сугубо для регистрации и авторизации...

Как провести авторизацию на web-сервере через внешнюю программу?
Доброго времени суток, уважаемые! Подскажите пожалуйста, как правильно сделать авторизацию в Apache и/или Nginx с помощью внешней...

как занести програмнно базовую ед.изм, ЕдиницуХраненияОстатков и Единицу для отч
В общем сабж...

Нужно настроить авторизацию
Помогите мне настроить авторизацию пользователей на сайте, чтобы после нажатия кнопки &quot;Войти&quot;, пользователь попадал по ссылке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru