1
0
Fork 0

发布应用 Casdoor

身份和访问管理(IAM)/单点登录(SSO)平台

Signed-off-by: 萌森 <qyg2297248353@163.com>
This commit is contained in:
萌森 2024-07-19 13:16:10 +08:00
parent 18ce625b8a
commit 85f6e564b3
9 changed files with 811 additions and 0 deletions

View File

@ -0,0 +1,490 @@
{
"organizations": [
{
"owner": "",
"name": "",
"displayName": "",
"websiteUrl": "",
"favicon": "",
"passwordType": "plain",
"passwordSalt": "",
"passwordOptions": [
"AtLeast6"
],
"countryCodes": [
"US",
"GB",
"ES",
"FR",
"DE",
"CN",
"JP",
"KR",
"VN",
"ID",
"SG",
"IN",
"IT",
"MY",
"TR",
"DZ",
"IL",
"PH",
"NL",
"PL",
"FI",
"SE",
"UA",
"KZ"
],
"defaultAvatar": "",
"defaultApplication": "",
"tags": [],
"languages": [
"en",
"zh",
"es",
"fr",
"de",
"id",
"ja",
"ko",
"ru",
"vi",
"it",
"ms",
"tr",
"ar",
"he",
"nl",
"pl",
"fi",
"sv",
"uk",
"kk",
"fa"
],
"masterPassword": "",
"defaultPassword": "",
"initScore": 2000,
"enableSoftDeletion": false,
"isProfilePublic": true,
"accountItems": []
}
],
"applications": [
{
"owner": "",
"name": "",
"displayName": "",
"logo": "",
"homepageUrl": "",
"organization": "",
"cert": "",
"enablePassword": true,
"enableSignUp": true,
"clientId": "",
"clientSecret": "",
"providers": [
{
"name": "",
"canSignUp": true,
"canSignIn": true,
"canUnlink": false,
"prompted": false,
"alertType": "None"
}
],
"signinMethods": [
{
"name": "Password",
"displayName": "Password",
"rule": "All"
},
{
"name": "Verification code",
"displayName": "Verification code",
"rule": "All"
},
{
"name": "WebAuthn",
"displayName": "WebAuthn",
"rule": "None"
},
{
"name": "Face ID",
"displayName": "Face ID",
"rule": "None"
}
],
"signupItems": [
{
"name": "ID",
"visible": false,
"required": true,
"prompted": false,
"rule": "Random"
},
{
"name": "Username",
"visible": true,
"required": true,
"prompted": false,
"rule": "None"
},
{
"name": "Display name",
"visible": true,
"required": true,
"prompted": false,
"rule": "None"
},
{
"name": "Password",
"visible": true,
"required": true,
"prompted": false,
"rule": "None"
},
{
"name": "Confirm password",
"visible": true,
"required": true,
"prompted": false,
"rule": "None"
},
{
"name": "Email",
"visible": true,
"required": true,
"prompted": false,
"rule": "None"
},
{
"name": "Phone",
"visible": true,
"required": true,
"prompted": false,
"rule": "None"
},
{
"name": "Agreement",
"visible": true,
"required": true,
"prompted": false,
"rule": "None"
}
],
"grantTypes": [
"authorization_code",
"password",
"client_credentials",
"token",
"id_token",
"refresh_token"
],
"redirectUris": [
"http://localhost:9000/callback"
],
"tokenFormat": "JWT",
"tokenFields": [],
"expireInHours": 168,
"failedSigninLimit": 5,
"failedSigninFrozenTime": 15
}
],
"users": [
{
"owner": "",
"name": "",
"type": "normal-user",
"password": "",
"displayName": "",
"avatar": "",
"email": "",
"phone": "",
"countryCode": "",
"address": [],
"affiliation": "",
"tag": "",
"score": 2000,
"ranking": 1,
"isAdmin": true,
"isForbidden": false,
"isDeleted": false,
"signupApplication": "",
"createdIp": "",
"groups": []
}
],
"providers": [
{
"owner": "",
"name": "",
"displayName": "",
"category": "",
"type": ""
}
],
"certs": [
{
"owner": "",
"name": "",
"displayName": "",
"scope": "JWT",
"type": "x509",
"cryptoAlgorithm": "RS256",
"bitSize": 4096,
"expireInYears": 20,
"certificate": "",
"privateKey": ""
}
],
"ldaps": [
{
"id": "",
"owner": "",
"serverName": "",
"host": "",
"port": 389,
"username": "",
"password": "",
"baseDn": "",
"autoSync": 0,
"lastSync": ""
}
],
"models": [
{
"owner": "",
"name": "",
"modelText": "",
"displayName": ""
}
],
"permissions": [
{
"actions": [],
"displayName": "",
"effect": "",
"isEnabled": true,
"model": "",
"name": "",
"owner": "",
"resourceType": "",
"resources": [],
"roles": [],
"users": []
}
],
"payments": [
{
"currency": "",
"detail": "",
"displayName": "",
"invoiceRemark": "",
"invoiceTaxId": "",
"invoiceTitle": "",
"invoiceType": "",
"invoiceUrl": "",
"message": "",
"name": "",
"organization": "",
"owner": "",
"payUrl": "",
"personEmail": "",
"personIdCard": "",
"personName": "",
"personPhone": "",
"price": 0,
"productDisplayName": "",
"productName": "",
"provider": "",
"returnUrl": "",
"state": "",
"tag": "",
"type": "",
"user": ""
}
],
"products": [
{
"currency": "",
"detail": "",
"displayName": "",
"image": "",
"name": "",
"owner": "",
"price": 0,
"providers": [],
"quantity": 0,
"returnUrl": "",
"sold": 0,
"state": "",
"tag": ""
}
],
"resources": [
{
"owner": "",
"name": "",
"user": "",
"provider": "",
"application": "",
"tag": "",
"parent": "",
"fileName": "",
"fileType": "",
"fileFormat": "",
"url": "",
"description": ""
}
],
"roles": [
{
"displayName": "",
"isEnabled": true,
"name": "",
"owner": "",
"roles": [],
"users": []
}
],
"syncers": [
{
"affiliationTable": "",
"avatarBaseUrl": "",
"database": "",
"databaseType": "",
"errorText": "",
"host": "",
"isEnabled": false,
"name": "",
"organization": "",
"owner": "",
"password": "",
"port": 0,
"syncInterval": 0,
"table": "",
"tableColumns": [
{
"casdoorName": "",
"isHashed": true,
"name": "",
"type": "",
"values": []
}
],
"tablePrimaryKey": "",
"type": "",
"user": ""
}
],
"tokens": [
{
"accessToken": "",
"application": "",
"code": "",
"codeChallenge": "",
"codeExpireIn": 0,
"codeIsUsed": true,
"createdTime": "",
"expiresIn": 0,
"name": "",
"organization": "",
"owner": "",
"refreshToken": "",
"scope": "",
"tokenType": "",
"user": ""
}
],
"webhooks": [
{
"contentType": "",
"events": [],
"headers": [
{
"name": "",
"value": ""
}
],
"isEnabled": true,
"isUserExtended": true,
"method": "",
"name": "",
"organization": "",
"owner": "",
"url": ""
}
],
"groups": [
{
"owner": "",
"name": "",
"displayName": "",
"manager": "",
"contactEmail": "",
"type": "",
"parent_id": "",
"isTopGroup": true,
"title": "",
"key": "",
"children": "",
"isEnabled": true
}
],
"adapters": [
{
"owner": "",
"name": "",
"table": "",
"useSameDb": true,
"type": "",
"databaseType": "",
"database": "",
"host": "",
"port": 0,
"user": "",
"password": ""
}
],
"enforcers": [
{
"owner": "",
"name": "",
"displayName": "",
"description": "",
"model": "",
"adapter": "",
"enforcer": ""
}
],
"plans": [
{
"owner": "",
"name": "",
"displayName": "",
"description": "",
"price": 0,
"currency": "",
"period": "",
"product": "",
"paymentProviders": [],
"isEnabled": true,
"role": ""
}
],
"pricings": [
{
"owner": "",
"name": "",
"displayName": "",
"description": "",
"plans": [],
"isEnabled": true,
"trialDuration": 0,
"application": ""
}
]
}

138
casdoor/1.645.0/data.yml Normal file
View File

@ -0,0 +1,138 @@
additionalProperties:
formFields:
- child:
default: ""
envKey: PANEL_DB_HOST
required: true
type: service
default: postgresql
edit: true
envKey: PANEL_DB_TYPE
labelZh: 数据库 服务 (前置检查)
labelEn: Database Service (Pre-check)
required: true
type: apps
values:
- label: PostgreSQL
value: postgresql
- label: MySQL
value: mysql
- label: MariaDB
value: mariadb
- label: Percona
value: percona
- child:
default: ""
envKey: PANEL_REDIS_SERVICE
required: true
type: service
default: redis
envKey: PANEL_REDIS_TYPE
labelZh: Redis 服务 (前置检查)
labelEn: Redis Service (Pre-check)
required: true
type: apps
values:
- label: Redis
value: redis
- default: "/home/casdoor"
edit: true
envKey: CASDOOR_ROOT_PATH
labelZh: 数据持久化路径
labelEn: Data persistence path
required: true
type: text
- default: 8000
edit: true
envKey: PANEL_APP_PORT_HTTP
labelZh: WebUI 端口
labelEn: WebUI port
required: true
rule: paramPort
type: number
- default: postgresql
edit: true
envKey: DB_TYPE
labelZh: 数据库 类型
labelEn: Database Type
required: true
type: select
values:
- label: PostgreSQL
value: postgresql
- label: MySQL (MariaDB, Percona)
value: mysql
- default: "127.0.0.1"
edit: true
envKey: DB_HOSTNAME
labelZh: 数据库 主机地址
labelEn: Database Host
required: false
type: text
- default: 5432
edit: true
envKey: DB_PORT
labelZh: 数据库 端口
labelEn: Database Port
required: false
rule: paramPort
type: number
- default: "gitea"
edit: true
envKey: DB_USER
labelZh: 数据库 用户名
labelEn: Database User
required: false
type: text
- default: ""
edit: true
envKey: DB_PASSWD
labelEn: Database Password
labelZh: 数据库 密码
random: true
required: false
rule: paramComplexity
type: password
- default: "gitea"
edit: true
envKey: DB_NAME
labelZh: 数据库 名称
labelEn: Database Name
required: false
type: text
- default: "127.0.0.1"
edit: true
envKey: REDIS_HOSTNAME
labelZh: Redis 主机
labelEn: Redis Host
required: true
type: text
- default: 6379
edit: true
envKey: REDIS_PORT
labelZh: Redis 端口
labelEn: Redis Port
required: true
rule: paramPort
type: number
- default: 0
edit: true
envKey: REDIS_DBINDEX
labelZh: Redis 索引
labelEn: Redis Index
required: true
type: number
- default: ""
edit: true
envKey: REDIS_PASSWORD
labelZh: Redis 密码
labelEn: Redis Password
required: false
type: password
- default: ""
edit: true
envKey: socks5Proxy
labelZh: Socks5 代理 (地区网络限制)
labelEn: Socks5 Proxy (Region Network Restriction)
required: false
type: text

View File

@ -0,0 +1,31 @@
version: "3.8"
networks:
1panel-network:
external: true
services:
casdoor:
image: casbin/casdoor:v1.645.0
container_name: ${CONTAINER_NAME}
labels:
createdBy: "Apps"
restart: always
networks:
- 1panel-network
ports:
- ${PANEL_APP_PORT_HTTP}:8000
build:
context: ./
dockerfile: Dockerfile
target: STANDARD
entrypoint: /bin/sh -c './server --createDatabase=true'
volumes:
- ${CASDOOR_ROOT_PATH}/data/files:/home/user/casdoor/files
environment:
- driverName=${DB_TYPE}
- dbName=${DB_NAME}
- redisEndpoint=${REDIS_HOSTNAME}:${REDIS_PORT}
- verificationCodeTimeout=10
- appname="casdoor"
- authState="casdoor"

View File

@ -0,0 +1,28 @@
#!/bin/bash
if [ -f .env ]; then
source .env
# setup-1 add default values
CURRENT_DIR=$(pwd)
echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env
if [ "$DB_TYPE" == "mysql" ]; then
echo "dataSourceName=\"$DB_USER:$DB_PASSWD@tcp($DB_HOSTNAME:$DB_PORT)/\"" >> .env
fi
if [ "$DB_TYPE" == "postgresql" ]; then
echo "dataSourceName=\"user=$DB_USER password=$DB_PASSWD host=$DB_HOSTNAME port=$DB_PORT sslmode=disable dbname=$DB_NAME\"" >> .env
fi
if [ -z "$REDIS_PASSWORD" ]; then
echo "redisEndpoint=\"$REDIS_HOSTNAME:$REDIS_PORT,$REDIS_DBINDEX,$REDIS_PASSWORD\"" >> .env
else
echo "redisEndpoint=\"$REDIS_HOSTNAME:$REDIS_PORT,$REDIS_DBINDEX\"" >> .env
fi
echo "Check Finish."
else
echo "Error: .env file not found."
fi

View File

@ -0,0 +1,10 @@
#!/bin/bash
if [ -f .env ]; then
source .env
echo "Check Finish."
else
echo "Error: .env file not found."
fi

View File

@ -0,0 +1,14 @@
#!/bin/bash
if [ -f .env ]; then
source .env
# setup-1 add default values
CURRENT_DIR=$(pwd)
echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env
echo "Check Finish."
else
echo "Error: .env file not found."
fi

81
casdoor/README.md Normal file
View File

@ -0,0 +1,81 @@
# Casdoor
Casdoor 是一个 UI 优先的身份访问管理 (IAM)/单点登录 (SSO) 平台,其 Web UI 支持 OAuth
2.0、OIDC、SAML、CAS、LDAP、SCIM、WebAuthn、TOTP、MFA、RADIUS、Google Workspace、活动目录和 Kerberos。
![Casdoor](https://file.lifebus.top/imgs/casdoor_cover.png)
## 简介
Casdoor是一个基于OAuth 2.0、OIDC、SAML 和 CAS 的UI-first的身份和访问管理(IAM)/单点登录(SSO)平台。
Casdoor是由Casbin社区通过Golang和React进行开发。
Casdoor旨在提供一个强大的认证平台来处理用户管理问题。
+ ⚡️ 强大的功能和极简的配置。 支持使用 登录和传统的用户名/密码登录只需几个步骤Casdoor即可帮助您构建您的用户管理系统。
+ 💥 前后端分离架构。 Casdoor提供可随心所欲的网页界面并支持高并发。
+ 🥂 活跃的开源社区。 Casdoor是开源的并有专业团队积极维护中。
+ 🌐 多语言支持。 Casdoor支持多种语言包括中文、英文、法文、以及更多语言。
## 特性
+ Casdoor 遵循前后端分离架构,采用 Golang 进行开发。 它支持高同步提供基于网页的用户界面管理并支持10多种语言的本地化。
+ Casdoor 支持第三方应用登录,如 GitHub、谷歌、QQ、微信等并支持通过插件扩展第三方登录。
+ Casdoor 支持基于 Cassbin 的授权管理。 它支持 ACL、RBAC、ABAC 和 RESTful鉴权管理模式。
+ Casdoor 提供了手机验证码、电子邮件验证码以及重置密码的功能。
+ Casdoor 支持日志的审计和记录。
+ Casdoor 可以使用阿里云、腾讯云、七牛云提供的图片CDN云存储功能。
+ Casdoor 允许自定义注册、登录以及找回密码页面。
+ 通过数据库同步支持与现有系统的集成,从而能够顺利过渡到 Casdoor。
+ Casdoor 支持主流数据库: MySQL、PostgreSQL、SQL Server 等, 并支持扩展插件以支持新的数据库。
## 安装说明
### 数据库支持
当前仅支持 `MySQL``PostgreSQL` 数据库。
官方支持使用 'SQLite' 数据库,但不建议在生产环境中使用。因此,我们放弃了 'SQLite' 数据库的配置选项。
同时还有一些其他数据库的支持,但是这些数据库的支持并不完善,因此我们也放弃了这些数据库的配置选项。
### 存储 `本地文件系统`
Casdoor 支持将用户头像等文件存储在本地文件系统中。默认情况下Casdoor 会将文件存储在容器内部 `/home/user/casdoor/files`
目录下。
我们将其挂载在 持久化目录 `/home/casdoor` 下,以便于数据的持久化。
### `Socks5 代理 (地区网络限制)` 配置
如果您的网络环境受到地区网络限制,您可以通过配置 `Socks5 代理` 来解决这个问题。
socks5Proxy 是 SOCKS 代理服务器 IP 地址。
设置代理端口因为我们有与Google相关的服务或者使用Google、GitHub、Facebook、LinkedIn或Steam作为OAuth提供商这在某些地区可能会受到网络限制。
### 数据初始化 `init_data.json` 配置
Casdoor 会在第一次启动时,自动初始化数据库。您可以通过配置 `init_data.json` 文件来初始化数据库。
配置自定义的 `init_data.json` 文件,需要挂载到容器中。
需要修改 `docker-compose.yml` 文件中的 `volumes` 部分,添加自定义配置的挂载,将 `init_data.json` 文件挂载到容器中,覆盖默认配置。
```yaml
volumes:
- ./config/init_data.json:/init_data.json
```
其中 `./config/init_data.json` 为默认配置文件所在路径,您可以根据实际情况进行修改为自定义绝对文件路径即可。

19
casdoor/data.yml Normal file
View File

@ -0,0 +1,19 @@
name: Casdoor
title: 身份和访问管理(IAM)/单点登录(SSO)平台
description: 身份和访问管理(IAM)/单点登录(SSO)平台
additionalProperties:
key: casdoor
name: Casdoor
tags:
- WebSite
- Middleware
- Tool
- Local
shortDescZh: 身份和访问管理(IAM)/单点登录(SSO)平台
shortDescEn: Identity and Access Management (IAM)/Single Sign-On (SSO) platform
type: website
crossVersionUpdate: true
limit: 0
website: https://casdoor.org/
github: https://github.com/casdoor/casdoor/
document: https://casdoor.org/zh/docs/overview/

BIN
casdoor/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB