Обзор
Casdoor is a UI-first Identity Access Management (IAM) / Single-Sign-On (SSO) platform with a web UI that supports OAuth 2.0, OIDC, SAML, CAS, LDAP, SCIM, WebAuthn, TOTP, MFA, RADIUS, Google Workspace, Active Directory, and Kerberos.
Casdoor обслуживает как веб-интерфейс, так и запросы на вход от пользователей приложения.
Функции Casdoor
Casdoor follows a frontend-backend separation architecture and is developed in Golang. It supports high concurrency, provides a web-based UI for management, and supports localization in over 10 languages.
Casdoor supports third-party application login options, such as GitHub, Google, QQ, and WeChat, and supports extending third-party login capabilities with plugins.
Casdoor поддерживает управление авторизацией на основе Casbin. Он поддерживает ACL, RBAC, ABAC и модели контроля доступа RESTful.
Casdoor provides phone verification codes, email verification codes, and password retrieval functionality.
Casdoor supports auditing and recording of access logs.
Casdoor integrates with Alibaba Cloud, Tencent Cloud, and Qiniu Cloud for image CDN and cloud storage.
Casdoor позволяет настраивать страницы регистрации, входа и восстановления пароля.
Casdoor supports integration with existing systems through database synchronization, enabling a smooth transition to Casdoor.
Casdoor supports mainstream databases such as MySQL, PostgreSQL, and SQL Server, and supports extending to new databases with plugins.
Как это работает

Шаг 0 (Предварительные знания)
- Casdoor следует процессу авторизации, построенному на протоколе OAuth 2.0. We highly recommend gaining a brief understanding of how OAuth 2.0 works. Вы можете обратиться к этому введению в OAuth 2.0.

Шаг 1 (Запрос авторизации)
Ваше приложение (которым может быть веб-сайт или любое другое приложение) должно составить URL в следующем формате: endpoint/login/oauth/authorize?client_id=xxx&response_type=code&redirect_uri=xxx&scope=read&state=xxx. Replace endpoint with your Casdoor host URL and xxx with your own information.
Как заполнить части xxx?
For
client_id: you can find this under each individual Application.Для
redirect_uri: вы должны установить это на URL-адрес обратного вызова вашего собственного приложения. Casdoor будет использовать эту информацию для отправки ответа обратно после авторизации.Для
state: вы должны заполнить это именем вашего приложения.
Приложение предложит пользователю: "Эй, мне нужны некоторые ресурсы, и мне нужно ваше разрешение на доступ к этим ресурсам. Можете ли вы перейти по этому URL и ввести для меня свое имя пользователя и пароль?"
С правильно составленным URL ваше приложение заставит пользователя отправить запрос на этот URL, и Запрос авторизации будет выполнен.
Шаг 2 (Предоставление авторизации)
Этот шаг прост: пользователь перенаправляется на URL, составленный на шаге 1, и пользователь увидит страницу входа от Casdoor. Введя правильное имя пользователя и учетные данные на страницу входа, Casdoor теперь знает идентификацию пользователя и готов отправить два элемента информации обратно на URL обратного вызова, установленный на шаге 1: code и state.
The user opens the URL and provides credentials to Casdoor. Casdoor will say: "Looking good ~ this is the user (who is authorizing the Application to receive the code and state) I know in my database, and I will send the code and state back to the Application using the callback URL (redirect_uri)".
С этими двумя элементами информации, отправленными обратно в ваше приложение, авторизация предоставляется приложению, и Предоставление авторизации завершено.
Casdoor также предоставляет вход через сторонние приложения. В этом случае, вместо страницы ввода учетных данных, вы увидите список поставщиков сторонних приложений. You can log in to your app using these providers, with Casdoor acting as middleware.
Шаг 3 (Предоставление авторизации)
На этом шаге ваше приложение уже имеет код из шага 2, и оно обращается к Casdoor: "Эй, пользователь согласился дать мне code. Можете ли вы проверить этот code и дать мне access_token?"
Шаг 4 (Токен доступа)
Casdoor отвечает вашему приложению: "Знаешь что, этот code кажется подлинным. You must be the authorized Application. Вот access_token для вас." С этим code, Casdoor подтверждает, что это авторизованное приложение (авторизованное правильным пользователем на шаге 2), пытающееся получить access_token (который будет использоваться позже для доступа к большему количеству ресурсов).
Шаг 5 (Токен доступа)
На этом шаге ваше приложение говорит: "Отлично! I just got the fresh 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 |