# cas **Repository Path**: haifengat/cas ## Basic Information - **Project Name**: cas - **Description**: 使用 casdoor 实现 SSO, 使用 casbin 验证权限. - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-10-22 - **Last Updated**: 2025-07-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # study_cas 学习 cas 单点登录 [casdoor 官网](https://casdoor.org/zh/docs/overview) ## 介绍 ## 软件架构 软件架构说明 ## 安装教程 ### 在 Docker 部署的 Casdoor 中增加达梦数据库支持 要在 Docker 方式部署的 Casdoor 中增加对达梦数据库(DM Database)的支持,你需要进行以下步骤: #### 1. 修改 Casdoor 源代码 首先需要修改 Casdoor 源代码以支持达梦数据库: 1. 克隆 Casdoor 源代码: > 已经同步到 gitee ```bash git clone https://gitee.com/haifengat/casdoor ``` 2. 添加达梦数据库驱动依赖: 在 `go.mod` 文件中添加达梦数据库驱动: ``` require github.com/godoes/gorm-dm v1.0.0 ``` 3. 修改数据库连接代码: 在 `object/adapter.go` 中,添加达梦数据库的支持: ```go import ( dm "github.com/godoes/gorm-dm" ) func NewAdapter(driverName string, dataSourceName string, dbName string) (*Adapter, error) { var db *gorm.DB var err error if driverName == "dm" { db, err = gorm.Open(dm.Open(dataSourceName), &gorm.Config{}) } else { // 其他数据库处理 } // ... } ``` #### 2. 构建自定义 Docker 镜像 1. 修改 `Dockerfile` 以包含达梦数据库驱动: ```dockerfile # 在适当位置添加达梦驱动下载 RUN go get github.com/godoes/gorm-dm@v1.0.0 ``` 2. 构建镜像: ```bash docker build -t casdoor-with-dm . ``` ## 3##. 配置数据库连接 在 `conf/app.conf` 或环境变量中配置达梦数据库连接: ``` driverName = dm dataSourceName = dm://username:password@host:port?schema=public dbName = your_db_name ``` #### 4. 使用自定义镜像运行 使用你构建的包含达梦支持的镜像运行 Casdoor: ```bash docker run -d \ -p 8000:8000 \ -e DRIVER_NAME=dm \ -e DATA_SOURCE_NAME="dm://username:password@host:port?schema=public" \ -e DB_NAME=casdoor \ casdoor-with-dm ``` #### 5. 达梦数据库初始化 确保达梦数据库中已创建了 Casdoor 所需的表结构,你可以: 1. 使用其他数据库初始化后导出 SQL 2. 针对达梦语法调整 SQL 脚本 3. 在达梦数据库中执行调整后的脚本 #### 注意事项 1. 达梦数据库与标准 SQL 有一些语法差异,可能需要调整 Casdoor 的部分 SQL 查询 2. 达梦的 JDBC URL 格式与 MySQL/PostgreSQL 不同 3. 确保网络连通性,Docker 容器能够访问达梦数据库服务器 如果需要更详细的配置或遇到特定问题,你可能需要参考达梦数据库的官方文档和 Casdoor 的数据库适配器实现。 ### 部署 casdoor ```sh docker pull registry.cn-shanghai.aliyuncs.com/haifengat/casdoor-all-in-one:v1.777.0 # 默认: admin/123 docker run -itd --name casdoor -p 8888:8000 registry.cn-shanghai.aliyuncs.com/haifengat/casdoor-all-in-one:v1.777.0 # 指定 pg 驱动, 创建 casdoor 数据库 pgServer=192.168.71.65 docker rm -f casdoor-only && docker run -itd --name casdoor-only -p 8888:8000 \ -e driverName=postgres \ -e dataSourceName='postgres://postgres:12345@'$pgServer':5432/casdoor?sslmode=disable' \ registry.cn-shanghai.aliyuncs.com/haifengat/casdoor:v1.777.0 ``` ## 使用说明 ### casdoor 服务器配置 [http://localhost] 1. "证书"添加 1. 名称: cert_haifengat 2. 下载证书: token_jwt_key.pem 保存到程序目录 config 下 2. "组织"菜单中添加组织 1. 名称: org_haifengat 2. 万能密码: 12345 3. 软删除 3. "角色"菜单中添加角色 1. 选择组织: org_haifengat 2. 名称: role_normal 3. 显示名称: 普通成员 4. "应用"添加 1. 名称: app_test01 2. 选择组织: org_haifengat 3. 得到 1. clientid: cd3518599975d2e97f5c 2. secret: 16f49d8622bf8159e64144351a1a5a8454f7dff5 4. 选择证书: cert_haifengat 5. 添加重定向 URLs: 1. 登录页面 url 中的 redict_uri 必须在此配置中 1. 测试本地后端 api 2. 测试 api 时填后端地址 3. 正常流程: 前端通过 redict_uri 得到 code&state, 再向后端请求登录 6. accessToken 过期时间 168h=7d 7. [x] 保持登录会话 8. [x] 启用自动登录 9. [ ] 启用验证码登录 10. [ ] 启用 WebAuthn 登录 11. OAuth 授权类型 - [x] Authorization Code - [x] Token - [ ] Password - [ ] ID Token 12. 保存 13. 测试用户注册 [http://localhost:8000/signup/app_test01] 1. test001/123456 2. 登录[http://localhost:8000/login/org_haifengat] 5. "用户"菜单添加 1. 选择组织: org_haifengat 2. 名称: haifengat 3. 显示名称: 海风 4. 用户类型: normal-user 5. 密码: 123456 6. 注册应用: app_test01 7. [ ] 管理员 8. [ ] 全局管理员 6. 获取的数据 | Name (in order) | Must | Description | | ---------------- | ---- | --------------------------------------------------- | | endpoint | Yes | Casdoor server URL, such as | | clientId | Yes | Application.clientId | | clientSecret | Yes | Application.clientSecret | | certificate | Yes | x509 certificate content of Application.cert | | organizationName | Yes | Application.organization | | applicationName | Yes | Application.applicationName | ### 登录 [参考代码](https://github.com/casbin/casnode/blob/master/controllers/account.go) 1. 获取 code ```sh export code=$(echo $(curl -X POST -H 'Content-Type:application/json' \ 'http://localhost:8000/api/login?clientId=cd3518599975d2e97f5c&responseType=code&redirectUri=http%3A%2F%2Flocalhost%3A9000%2Fapi%2Fsignin&scope=read&state=app_test01' \ -d '{ "application": "app_test01", "organization": "org_haifengat", "username": "hf001", "password": "123456", "autoSignin": true, "type": "code" }') | awk -F ',' '{print $5}' |awk -F ':' '{print $2}'|awk -F '"' '{print $2}') echo $code ``` 2. 获取 accessCode ```sh export accessToken=$(echo $(curl http://localhost:9000/api/signin?code=$code&state=app_test01) |grep -Pos "\"accessToken\":\"[^,]*\""|awk -F '"' '{print $4}') echo $accessToken ``` ## 附 [RBAC api](https://casbin.org/zh/docs/rbac-api) [apiFox 测试用例](https://www.apifox.cn/apidoc/shared-4a9dcf33-a2b6-4702-a20b-e96ef8d07f60) [导入用户(xlsx 示例)](xlsx/users.xlsx) [示例代码](demo/main.go)