Обзор
Casdoor - это платформа Identity Access Management (IAM) / Single-Sign-On (SSO) с веб-интерфейсом, поддерживающим OAuth 2.0, OIDC, SAML, CAS, LDAP, SCIM, WebAuthn, TOTP, MFA, RADIUS, Google Workspace, Active Directory и Kerberos.
Casdoor обслуживает как веб-интерфейс, так и запросы на вход от пользователей приложения.
Функции Casdoor
Casdoor следует архитектуре разделения фронтенда и бэкенда, разработанной на Golang. Он поддерживает высокую конкуренцию, предоставляет веб-интерфейс для управления и поддерживает локализацию на 10+ языках.
Casdoor поддерживает вход в сторонние приложения, такие как GitHub, Google, QQ и WeChat, и поддерживает расширение входа в сторонние приложения с помощью плагинов.
Casdoor поддерживает управление авторизацией на основе Casbin. Он поддерживает ACL, RBAC, ABAC и модели контроля доступа RESTful.
Casdoor предоставляет функции проверки кода по телефону, проверки кода по электронной почте и восстановления пароля.
Casdoor поддерживает аудит и запись журналов доступа.
Casdoor интегрируется с облачным хранилищем изображений Alibaba Cloud, Tencent Cloud и Qiniu Cloud.
Casdoor позволяет настраивать страницы регистрации, входа и восстановления пароля.
Casdoor поддерживает интеграцию с существующими системами посредством синхронизации баз данных, обеспечивая плавный переход на Casdoor.
Casdoor поддерживает основные базы данных, такие как MySQL, PostgreSQL и SQL Server, и поддерживает расширение новых баз данных с помощью плагинов.
Как это работает
Шаг 0 (Предварительные знания)
- Casdoor следует процессу авторизации, построенному на протоколе OAuth 2.0. Настоятельно рекомендуется иметь представление о том, как работает OAuth 2.0. Вы можете обратиться к этому введению в OAuth 2.0.
Шаг 1 (Запрос авторизации)
Ваше приложение (которым может быть веб-сайт или любое другое приложение) должно составить URL в следующем формате: endpoint/login/oauth/authorize?client_id=xxx&response_type=code&redirect_uri=xxx&scope=read&state=xxx
. Замените endpoint
на URL-адрес хоста вашего Casdoor и xxx
на свою собственную информацию.
Как заполнить части xxx
?
Для
client_id
: вы можете найти это в каждом отдельном приложенииДля
redirect_uri
: вы должны установить это на URL-адрес обратного вызова вашего собственного приложения. Casdoor будет использовать эту информацию для отправки ответа обратно после авторизации.Для
state
: вы должны заполнить это именем вашего приложения.
Приложение предложит пользователю: "Эй, мне нужны некоторые ресурсы, и мне нужно ваше разрешение на доступ к этим ресурсам. Можете ли вы перейти по этому URL и ввести для меня свое имя пользователя и пароль?"
С правильно составленным URL ваше приложение заставит пользователя отправить запрос на этот URL, и Запрос авторизации
будет выполнен.
Шаг 2 (Предоставление авторизации)
Этот шаг прост: пользователь перенаправляется на URL, составленный на шаге 1, и пользователь увидит страницу входа от Casdoor. Введя правильное имя пользователя и учетные данные на страницу входа, Casdoor теперь знает идентификацию пользователя и готов отправить два элемента информации обратно на URL обратного вызова, установленный на шаге 1: code
и state
.
Пользователь открывает URL и предоставляет учетные данные Casdoor. Casdoor скажет: "Выглядит хорошо ~ это пользователь (который авторизует приложение для получения code
и state
), которого я знаю в своей базе данных, и я отправлю code
и state
обратно в приложение с помощью URL обратного вызова (redirect_uri
)".
С этими двумя элементами информации, отправленными обратно в ваше приложение, авторизация предоставляется приложению, и Предоставление авторизации
завершено.
Casdoor также предоставляет вход через сторонние приложения. В этом случае, вместо страницы ввода учетных данных, вы увидите список поставщиков сторонних приложений. Вы можете войти в свое приложение с помощью этих провайдеров, при этом Casdoor действует как промежуточный слой (промежуточное ПО).
Шаг 3 (Предоставление авторизации)
На этом шаге ваше приложение уже имеет код из шага 2, и оно обращается к Casdoor: "Эй, пользователь согласился дать мне code
. Можете ли вы проверить этот code
и дать мне access_token
?"
Шаг 4 (Токен доступа)
Casdoor отвечает вашему приложению: "Знаешь что, этот code
кажется подлинным. Вы должно быть правильное приложение. Вот access_token
для вас." С этим code
, Casdoor подтверждает, что это авторизованное приложение (авторизованное правильным пользователем на шаге 2), пытающееся получить access_token
(который будет использоваться позже для доступа к большему количеству ресурсов).
Шаг 5 (Токен доступа)
На этом шаге ваше приложение говорит: "Отлично! Я только что получил свежий и вкусный access_token
. Теперь я могу использовать его для доступа к более ценным ресурсам с Resource Server
!"
Затем ваше приложение обращается к Resource Server
и говорит: "Эй, приятель, можешь проверить этот access_token
? Я получил его от Casdoor. Хотите проверить, является ли это правильным токеном, который вы выдали Casdoor?"
Шаг 6 (Защищенный ресурс)
Resource Server
отвечает вашему приложению: "Неплохо. Он кажется таким же, как тот, что я выдал Casdoor, и Casdoor говорит, что тот, кто держит этот access_token
, может получить доступ к этим Protected Resources
. Так что давайте и возьмите его!"
И вот, в основном, как Casdoor работает с вашим приложением.
Casdoor может действовать как Authorization Server
и Resource Server
. Другими словами, Casdoor авторизует ваше приложение для доступа к ресурсам, обычно информации текущего зарегистрированного пользователя, из базы данных Casdoor.
Онлайн демо
Casdoor
Вот онлайн-демо, развернутое Casbin.
Вход для глобального администратора:
- Имя пользователя:
admin
- Пароль:
123
Casbin-OA
Casbin-OA - одно из веб-приложений Casbin. Он использует Casdoor для аутентификации.
- Casbin-OA
- Исходный код: https://github.com/casbin/casbin-oa
Casnode
Casnode - это официальный форум, разработанный сообществом Casbin.
Он использует Casdoor в качестве платформы аутентификации и управляет участниками.
- Casnode
- Исходный код: https://github.com/casbin/casnode
Архитектура
Casdoor состоит из двух частей:
Имя | Описание | Язык | Исходный код |
---|---|---|---|
Фронтенд | Веб-интерфейс для Casdoor | JavaScript + React | https://github.com/casdoor/casdoor/tree/master/web |
Бэкенд | RESTful API бэкенд для Casdoor | Golang + Beego + SQL | https://github.com/casdoor/casdoor |