Делаю single sign on. Правильно ли я настраиваю авторизацию?
Всем привет.
Преамбула:
Есть несколько PHP проектов. У каждого проекта в данное время есть своя таблица юзеров в которой: id, логин, пароль, роль. Никаких сложных ACL нет, грубо говоря всего 3 роли. Админ, менеджер, юзер. Проверяются с помощью контроллера и префиксов.
Требуется сделать единую аутентификацию = общую базу с пользователями и паролями. Возможность зайти на одном сайте и оказаться залогиненным на всех остальных
Но вопрос не по аутентификации. Будем считать, что оно работает.
Проблема в авторизации = кому и что позволено делать: раз аутентификация едина, то из каждого проекта мы убираем таблицу с юзерами и проект смотрит их в общей базе.
Вопрос: у пользователя могут быть разные права в разных проектах, раньше это не составляло проблемы. Однако, теперь когда таблица одна для всех, то как определить какой юзер что может делать на данном сайте?
Мне видится решение такое: в общей базе храним логины/пароли. Но у каждого проекта всё равно оставляем таблицу users где будет id и роль.
Так нормально или криво?
Вопервых они не должны смотреть в общую базу, они все должны быть связаны с отдельным сервером авторизации.
Посмотрите как эту проблему решили в OAuth. Там просто за пользователем для конкретного ресурса закрепляются свои права.
то есть алгоритм такой:
- авторизуем чувака на сервере авторизации и получаем токен
- по токену получаем права доступные для определенного приложения. если у вас нет контроля за всеми приложениями можно для каждого еще приватный токен держать что бы одна апа не могла изменять права другой апы.