SSO单点登录
前言
我们这里接入的单点登录程序使用的是 "Casdoor" 别的不说了可以接入几十种,你见过的没见过的都有
详细的可以看下面有一份支持接入的方式表单,不啰嗦了直接开始
支持接入的方式表单
图表来自 "Casdoor Docs"
Provider | Logo | Provider | Logo | Provider | Logo | Provider | Logo |
---|---|---|---|---|---|---|---|
Adfs | ![]() | Alipay | ![]() | Amazon | ![]() | Apple | ![]() |
Auth0 | ![]() | AzureAD | ![]() | Baidu | ![]() | Battle.net | ![]() |
Bilibili | ![]() | Bitbucket | ![]() | Box | ![]() | Casdoor | ![]() |
Cloud Foundry | ![]() | Dailymotion | ![]() | Deezer | ![]() | DigitalOcean | ![]() |
DingTalk | ![]() | Discord | ![]() | Douyin | ![]() | Dropbox | ![]() |
Eve Online | ![]() | ![]() | Fitbit | ![]() | Gitea | ![]() | |
Gitee | ![]() | GitHub | ![]() | GitLab | ![]() | ![]() | |
Heroku | ![]() | InfluxCloud | ![]() | Infoflow | ![]() | ![]() | |
Intercom | ![]() | Kakao | ![]() | Lark | ![]() | Lastfm | ![]() |
Line | ![]() | ![]() | Mailru | ![]() | Meetup | ![]() | |
MicrosoftOnline | ![]() | Naver | ![]() | Nextcloud | ![]() | Okta | ![]() |
OneDrive | ![]() | Oura | ![]() | Patreon | ![]() | Paypal | ![]() |
![]() | SalesForce | ![]() | Shopify | ![]() | Slack | ![]() | |
SoundCloud | ![]() | Spotify | ![]() | Steam | ![]() | Strava | ![]() |
Stripe | ![]() | TikTok | ![]() | Tumblr | ![]() | Twitch | ![]() |
![]() | Typetalk | ![]() | Uber | ![]() | VK | ![]() | |
![]() | WeCom | ![]() | ![]() | Wepay | ![]() | ||
Xero | ![]() | Yahoo | ![]() | Yammer | ![]() | Yandex | ![]() |
Zoom | ![]() | ![]() | SMS | ![]() |
通用配置 - 回调参数URL
- 回调参数URL:http(s)://YOU_URL/callback,下面举几个例子
- http://22.333.222.111:8000/callback
- https://22.111.222.333:8000/callback
- http://sso.baidu.com/callback
- https://sso.baidu.com/callback
总之就是不论你怎么写 结尾加一个 /callback
即可,
这个是对接到提供商新建的应用程序里面使用,现在不懂没关系往下看看到了就懂了
- 接入提供商
接入的提供商都是在Casdoor
,顶部选项提供商
那里接入的,接入好后再去应用里面添加

下面我们说一下怎么接入不同方式的登录吧
接入
打开QQ开发者平台,审核通过后,创建网页应用,获取您的客户ID和客户端密钥。
需要有备案哦~
若是QQ开发者平台没法认证可以先在 腾讯应用开放平台 认证后,我们拿腾讯应用开放平台的OpenID和UserID去绑定QQ开发者平台的移动应用里面的关联腾讯开放平台,这样腾讯开放平台认证审核通过后QQ开发者平台也就审核通过了
- QQ开发者平台有感觉页面js有问题总是加载不出来 我只能通过这样的办法通过认证

注册应用 - 添加回调参数
认证审核 和 应用注册审核都很快的,之要是在工作日內,一般都是在下午处理,下午3-5点左右处理
- 注册应用时,记得填写我们的回调参数URL哦~
应用注册时需要遵循他们的规范,不然不给通过
不过我们可以先等审核通过了拿到 客户端ID(Client Id) 和 客户端秘钥(Client Secret) 然后再去删掉咯
应用注册好了 我们等着就行一个工作日內处理完

回调参数
应用注册好后 审核也通过了 我们接入到Casdoor
吧

Casdoor
接入也接入好了 我们看看登录演示

打开钉钉开放平台,登录后按照官方提示注册自己的应用,即可在应用信息
看到 客户端ID(Client Id) 和 客户端秘钥(Client Secret)
注册好应用后 我们来添加一下回调参数,回调参数链接就是我们开始提到是 通用配置格式里面的,按照下图来填写即可

回调参数填写好后我们来开通几个权限,钉钉需要手动开启几个权限,在权限管理
內开通如下权限,缺一不可
个人手机号信息 ontact.User.mobile
通讯录个人信息读权限 Contact.User.Read
成员信息读权限 qyapi_get_member

回调参数和权限都开通后 我们开始接入到 Casdoor
,很简单照着写吧

Casdoor
接入打开飞书开放平台,登录后按照官方提示注册自己的应用,即可在凭证与基础信息
看到 客户端ID(Client Id) 和 客户端秘钥(Client Secret)
飞书接入也很简单,但是有个问题是登录的时候是需要使用APP,并且是飞书商务版
我们先添加一下回调参数,第一次使用的话我们得发布一下应用,直接点点点点就行,直接抄作业吧如下图

飞书也不需要我们去开通什么权限,直接能用,下面开始接入到 Casdoor
,很简单照着写吧

Casdoor
接入填写好后,下图是我们接入登录的预览图

打开百度开放平台,登录后按照官方提示注册自己的应用,即可在基本信息
看到 客户端ID(Client Id) 和 客户端秘钥(Client Secret)
呃呃呃,百度的竟然没HTTPS
,虽然没啥问题,总觉得怪怪的 哈哈~~
接入百度也很简单,创建好应用后 我们直接来安全设置
来填写回调参数URL

然后就没然后了,下面我们去Casdoor
填入接入参数吧

Casdoor
接入填写好后,下图是我们接入登录的预览图

打开GitHub OAuth Apps,左上角New OAuth Apps注册一个应用
然后就会看到 客户端ID(Client Id) 和我们需要手动创建一个 客户端秘钥(Client Secret)
注册的时候看起来和我提供的图片不一样,实际上没啥区别
Authorization callback URL
:这个选项是填写回调参数URL的
我们直接快进到填写参数接入到 Casdoor
,很简单照着写吧

Casdoor
接入填写好后,下图是我们接入登录的预览图

打开Google API 凭据,顶部的创建凭据
--> OAuth 客户端ID
注册一个应用
直接照着下图写,也记得填写回调参数URL喔~
如果你是第一次配置,请直接看下面的第三张图再回来新建应用

创建好应用应该能看到 客户端ID(Client Id) 和 客户端秘钥(Client Secret)
快进到填写参数接入到 Casdoor
,很简单照着写吧

Casdoor
接入如果你是第一次创建谷歌 OAuth 客户端ID
,首选需要配置一下同意屏幕

打开Microsoft AzureAD应用注册,注册一个我们自己的应用
如果你有其他的需求,一个默认的回调参数URL不够用,可以在新建好后再来添加

注册好应用后我们就能看到我们的 客户端ID(Client Id),然后再去新建一个客户端秘钥(Client Secret)
客户端秘钥记得提前保存,不然刷新页面就不会再出现了,只能再重新新建一个秘钥了

客户端ID(Client Id) 和 客户端秘钥(Client Secret) 都拿到了我们也要去授权一下 API权限
我们只需要一个User.Read
,默认帮我们加好了,我们只需要授权一下就可以,但是如果需要其他的自行添加

该设置的都设置了,开始接入到 Casdoor
吧

Casdoor
接入新增多个callback URL
参数

打开GitLab 应用注册,注册一个我们自己的应用,注册应用时候记得填写回调参数URL和选择权限(3个)

应用注册好后就会看到到我们的 客户端ID(Client Id) 和 客户端秘钥(Client Secret),然后我们直接填写到填写到Casdoor
接入

Casdoor
接入Casdoor
接入后我们在AList后台绑定时,登录帐号后记得授权哦~

打开Yandex开发者中心注册一个我们自己的应用
- 注册很简单,
- 第一步:填一个注册
应用名称
以及勾选一下应用的类型
- 第二步:略
- 第三步:填写我们的回调参数,我们就填写通用配置-回调参数url即可
- 第四步:写个邮箱即可
- 第四步完成后会出现一个预览的,我们选择下面长条橙黄色按钮: Everything is correct. Create the app
- 第一步:填一个注册

新建好应用后我们就能看到 客户端ID(Client Id) 和 客户端秘钥(Client Secret),填写到Casdoor
提供商
如果新建好应用后刷新了页面,可以找到我们新建的应用点进去获取参数

Casdoor
接入使用Yandex
登录预览

打开Discord开发者中心注册一个我们自己的应用,照着下图操作即可

注册好应用后,我们 客户端ID(Client Id) 和 客户端秘钥(Client Secret) 就能看到
顺便填写一下 回调参数URL,然后将参数填写到Casdoor
接入

Casdoor
接入使用Discord登录预览
登录预览

首先打开Twitch开发者控制台注册一个我们的应用
登录控制台时我们先授权一下给Twitch
权限(下图左侧图),也要在个人设置绑定邮箱和二次验证(下图右侧图)
- 二次验证(2FA)使用Google验证器 或 Microsoft验证器,这两个都可以

然后注册我们的开发者应用,记得填写回调参数URL,类别看着选吧实在不知道和我的一样也可以

Casdoor
接入新建好后,我们找到我们新建的应用,手动获取一下秘钥,就得到了客户端ID(Client Id) 和 客户端秘钥(Client Secret),然后填写到Casdoor
接入吧

Casdoor
接入填写到Casdoor
接入好后,我们也回到AList绑定单点登录试试看~

Twitch登录没有问题
呃呃呃,基本添加方式摸清了,但是最后还是需要企业认证绑定才行,我们先看看怎么用吧
打开企业微信后台,在自建
添加一个我们自己的应用,然后填写回调参数
但是企业微信的回调参数和以往的写法不同,参考链接

回调参数写好了,我们去寻找 客户端ID(Client Id) 和 客户端秘钥(Client Secret) 以及 企业应用ID(Agent ID)

Casdoor
接入到这里填写好了 倒是没什么问题了,然后问题不出意外的出现了意外 ⚠️⚠️⚠️
But! 重点来了,填写好后竟然发现好像还是需要企业认证的...链接也附带到下面了有兴趣的可以看看

上述问题的链接如下:
更多的厂商接入还在路上,敬请期待~
支付宝,哔哩哔哩,抖音,微信/企业微信(企业内部和第三方商业)
- 这些需要企业认证才可以,个人无法申请
微博:没实名过,需要实名认证,如需要自行接入很简单
Gitee:也没实名过,也需要实名认证,如需要自行接入很简单
Infoflow(百度如流):需要企业资质
企业微信:两个不同
- 企业内部:https://work.weixin.qq.com/wework_admin/frame#apps
- 如果需要添加可以在前面标签中看看已经添加了一个大概企业微信
- 第三方商业:https://open.work.weixin.qq.com/wwopen/developer#/sass/power/inter
- 企业内部:https://work.weixin.qq.com/wework_admin/frame#apps
Apple开发者:没折腾明白
Steam:没账号就没测试
微信开放平台需付费,中国地区¥300,非中国地区 $99
- 微信开放平台帐号的开发者资质认证提供更安全、更严格的真实性认证、也能够更好的保护企业及用户的合法权益
- 开发者资质认证通过后,微信开放平台帐号下的应用,将获得微信登录、智能接口、第三方平台开发等高级能力
- 审核费用:中国大陆地区:300元,非中国大陆地区:99美元

以下这些暂时还未尝试
Tiktok:需要填写然后审核
Okta:没见过暂时还没尝试
Slack:暂时还没尝试
Twitter:申请困难,官方限制严格
Facebook:需要能连接到外网的机器,因没有暂无法添加(很简单)
Instagram:和Facebook 好像一样 是一家的
- 网游登录不了instagram 没法找到开发者后台
也就整理这些吧,国内国外的都有了
如何使用其他组织登录?
上述也看到了我们也选择了我们新建的组织alist-org
,然后用户alist-user
绑定的也是我们新建的组织
那么我们登录的时候默认页面如果去使用alist-user
帐号去等我们是登录不了的
我们得去https://YOU_URL/login/alist-org
这个页面去登录才能找到alist-user
这个用户的帐号
若是觉得麻烦,我们直接把alist-user
这个用户绑定的组织换成默认就可以使用https://YOU_URL/login
登录了
如何绑定第三方应用登录到用户?
我们在提供商接入应用后,在应用也添加好,在用户页面内 组织
和 应用
都填好对应的
然后下拉有一个第三方登录
,我们在这里绑定好到时候我们可以使用这些应用来登录我们的alist-user
帐号
展开查看如何绑定第三方应用登录到用户

如何禁止其他人注册?
- 找到对应的应用,进去下拉会看到一个
启用注册
的选项,关闭即可- 简单粗暴,这样除了现有的用户以外其他人都无法注册
- 找到对应的应用,下来添加了第三方登录的接入,把那些接入应用的
可用于注册
选项关闭即可- 如果直接关闭
启用注册
的选项 第二个不用管会自动关闭
- 如果直接关闭
展开查看如何禁止其他人注册

单点登录自动注册为AList帐号
- AList 版本 > v3.22.1 新增功能
在使用单点登录注册为AList帐号前,我们需要先将AList的单点登录进行绑定,绑定方法在AList文档有详细说明这里就不写啦
支持上述提到的
五个
单点登录方法如果使用
Casdoor
,请勿直接使用默认组织(app-built-in),因为这个组织内的用户都是全局管理员帐号除了
Casdoor
其它的只需要填写客户端ID
和客户端秘钥
以及下面新增的单点登录帐号注册为AList帐号的配置
SSO完整填写示例
分别如何填写看下面的详细说明,示意图只是一个填写参考并不适合每个人的用户习惯

SSO自动注册
如果我们想让SSO单点登录注册为AList帐号我们需要打开这个选项才可以使用
SSO默认路径
也就是说注册的帐号默认使用的路径,相当于AList用户设置里面的基本路径
可以是根目录/
,也可以是用户指定的路径/path/test/Demo

SSO默认权限
相当于注册的用户默认开通哪些权限,就如下面所示的

默认为0,不开通任何权限
如果在注册时我们需要开通一些权限我们只需要不同权限的数字相加即可
例如:
- 我们需要默认开通用户的
WebDav读取
和WebDav管理
那就是256+512=768,我们就在填写选项填写768
即可 - 如果我们需要注册时默认开通
创建目录或上传
和重命名
和删除
这三个权限 那就是8+16+128=152,我们在后台填写152
即可
例子就不多说了,需要那个权限自己相加就可以
.注意事项以及说明
4.1-AList用户数据库已经的帐号
username | password | base_path | role | permission | opt_secret | github_id | disabled | sso_id |
---|---|---|---|---|---|---|---|---|
anyi | FzdDfkmU | /本地1 | 0 | 3 | 0 | |||
anyi_dc188911 | RUCtgqCw | /本地1 | 0 | 3 | 0 | dc18891 |
如上表格所示,新注册的单点登录用户名称后增加了一串多余的id
这是因为AList用户数据库中已有了相同的用户,所以在用户名后把单点登录ID也添加上去了
如果你新注册的单点登录用户名在AList用户数据库中没有,它就不会在名字后面添加单点登录ID
Casdoor 编译教程
因为 Casdoor
如果使用他们官网托管的是需要付费的也理解,但是 Casdoor
是开源免费的 可以自己编译然后再部署
Casdoor官网,GitHub,Casdoor使用文档,AList接入如何使用Casdoor教程
编译完毕 - 自己部署
#1.clone GitHub代码
git clone https://github.com/casdoor/casdoor.git
#2.进入前端文件
cd web
#3.安装 package.json 所需要的依赖(有点久半个小时好像)
yarn install
#4.安装好依赖后 编译前端
yarn build
#5.前端编译好,路径回到上一级,然后编译后端
cd ../
go build
#6.把编译好的`casdoo`执行文件带带走,以及还要需要的 /conf 配置文件夹,以及 /web/build 这两个文件夹
casdoor.exe
/conf/*
/web/build/*
#7.然后移动到所需要的地方即可,否则package,json 13W个文件1G大小..太大了不方便移动
上述移动文件夹时候目录结构也要保持哈~(应该需要相对的目录结构才行)
我这里使用的是Windows的编译出来的是casdoor.exe
可执行文件,如果是Linux 就是二进制casdoor
文件
- 使用方法和 AList 手动启动一样 不过不用携带
server
参数可以直接启动即可