Jump to content
Калькуляторы

Посоветуйте, как лучше сделать Авторизация на доп.сервисе, основывающаяся на биллинге

Есть биллинговая система, включающая в себя RADIUS-сервер.

Данные хранятся в СУБД Oracle.

Оба сервера (и биллинг, и БД) работают под управлением RHLE (64-битной).

 

Есть сервер, обслуживающий хотспот (управление хотспотом, DHCP, DNS, прокси и т.п.).

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

Скрипт авторизации клиентов хотспота сделан на PHP. При авторизации клиента на портале хотспота нужно проверить, подключена ли у соответствующего абонента в биллинге тарифная опция. Если подключена, то авторизовать, если не подключена, то отказать в регистрации.

Сервер работает под управлением FreeBSD 8.2 (64-битной).

 

Проблема заключается в том, что для 64-разрядной FreeBSD не существует клиента Oracle.

Соответственно подключиться к БД и проверить абонента нельзя.

 

Пока что я только четыре способа нашел решить эту проблему.

 

1. Для FreeBSD все же существует клиент Oracle для JDBC (для работы ява-приложений). То есть можно установить ява-машину, JDBC, и в скрипте подключаться к БД через JDBC.

Вариант вроде бы рабочий, но уж очень костыльный. Да и на PHP работать с JDBC не очень просто.

 

2. На сервере СУБД Oracle имеется DBI-Proxy. Можно написать на Perl скрипт, который будет подключаться через dbiproxy к биллинговой БД, загружать нужные данные (список абонентов с подключенной опцией) в локальную БД. А скрипт авторизации будет подключаться уже к локальной БД. У такого подхода есть и некоторые плюсы (у веб-сервера не будет связи с биллинговой БД на случай если в коде будут уязвимости), но основной минус с том, что актуальные данные будут запаздывать. Если скрипт синхронизации будет запускаться (к примеру) каждый час, значит в худшем случае абонент после подключения опции не сможет подключиться к хотспоту в течении почти часа.

 

3. На сервере FreeBSD установить линукслятор (или другой подобный эмулятор Linux) и использовать Oracle-клиент для Linux. Все вроде бы хорошо, но у меня так и не получилось из скрипта использовать линуксовый Oracle-клиент. То ли под эмулятором должно быть все, что использует клиент (в том числе PHP с Apache), то ли еще что, но не работает.

 

4. В скрипте авторизации можно проверять наличие нужной услуги у абонента не в БД, а через RADIUS-сервер. То есть я из скрипта авторизации шлю RADIUS-запрос к биллингу и в зависимости от ответа авторизовать абонента на портале или отказать в авторизации. Выглядит красиво, но насколько я понимаю, мне нужно будет эмулировать ISG, а PHP не очень подходит для написания серверов.

Share this post


Link to post
Share on other sites

5. Обычный http запрос от сервера авторизации к серверу БД. На сервере БД соответственно web-сервер + реализация нужного функционала на чем угодно (например php).

Share this post


Link to post
Share on other sites

На сервере СУБД нет веб-сервера, там вообще никакого постороннего ПО кроме Oracle нет.

Ставить без веской причины постороннее ПО я бы не хотел.

Хотелось бы решить задачу, не трогая сервера биллинга и БД.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this