Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: SSO Auto Register #4795

Merged
merged 14 commits into from
Jul 20, 2023
Merged

feat: SSO Auto Register #4795

merged 14 commits into from
Jul 20, 2023

Conversation

wintbiit
Copy link
Contributor

@wintbiit wintbiit commented Jul 18, 2023

solved: #4692

支持了Casdoor的自动注册,添加了相关的配置字段。

fix:

  • Casdoor自动注册用户的SSO_ID映射改为sub字段,而非preferred_username

feat:

  • 可开关的自动注册选项
  • 自动注册时Username映射为preferred_username claim, sso_id映射为sub
  • 可配置自动注册用户的默认目录
  • 可配置自动注册用户的默认权限
  • 可限制自动注册之用户组

future:

  • OIDC的相关支持

添加配置字段
实现 Casdoor SSO 自动注册
同步settings
fix: json unmarshal
添加配置字段
实现 Casdoor SSO 自动注册
同步settings
fix: json unmarshal
@welcome
Copy link

welcome bot commented Jul 18, 2023

Thanks for opening this pull request! Please check out our contributing guidelines.

@anwen-anyi
Copy link
Contributor

请问 默认权限(Sso default permission)和用户组(Sso user group)是怎么写?

  • 0是不是代表默认游客权限?
  • 用户组是对应下面的 role?
    image

还有路径是不是就是在AList新建用户时选择的路径?
例如我在AList新建用户的时候选择的是 /本地 ,在单点登录时就要写/本地

@anwen-anyi
Copy link
Contributor

anwen-anyi commented Jul 18, 2023

  • permission 为 0(不知道这个选项分别怎么写开启不同的权限QAQ~)
  • group 为 (好像只能为空0也不行~,也就是GENERAL用户组如果只能新建这个用户组好像没必要填写这个选项了~)
  • default dir 为 /本地1

最终注册的为如下图所示~ (没问题~)
image

@wintbiit
Copy link
Contributor Author

wintbiit commented Jul 18, 2023

@anwen-anyi
sso_user_group对应的是Casdoor中的用户组,不为空的含义是在该组下的用户才能自动注册
sso_default_permission是用户权限,对应在user.go. 前端/@manage/users/edit/{id}下的对应组件是有包装的,但是@manage/settings/sso是自动生成的,对应就只能限制填写位处理后的permission 值

@anwen-anyi
Copy link
Contributor

anwen-anyi commented Jul 18, 2023

@anwen-anyi
sso_user_group对应的是Casdoor中的用户组,不为空的含义是在该组下的用户才能自动注册,不是role。默认role都是普通用户,因为似乎没有看到其他api有分辨普通用户和游客
sso_default_permission是用户权限,对应在user.go. 前端/@manage/users/edit/{id}下的对应组件是有包装的,但是@manage/settings/sso是自动生成的,对应就只能限制填写位处理后的permission 值

emmm 没太懂哈哈~ 你可以举个栗子么

@wintbiit
Copy link
Contributor Author

@anwen-anyi
sso_user_group对应的是Casdoor中的用户组,不为空的含义是在该组下的用户才能自动注册,不是role。默认role都是普通用户,因为似乎没有看到其他api有分辨普通用户和游客
sso_default_permission是用户权限,对应在user.go. 前端/@manage/users/edit/{id}下的对应组件是有包装的,但是@manage/settings/sso是自动生成的,对应就只能限制填写位处理后的permission 值

emmm 没太懂哈哈~ 你可以举个栗子么

@anwen-anyi
对于sso_user_group, 如果不为空,那么用户注册时会检查casdoor返回的groups字段,如果groups字段中含有sso_user_group配置的组,那么允许注册

比如,用户名: alist_test,Casdoor groups配置: ["alist_user", "admin"]
sso_user_group 填写alist_user或留空,那么用户成功注册;若sso_user_group填写other,则注册失败,报错"user group not allow to register"

对于sso_default_permissionuser.go基本涵盖了,但是不算位运算的话直接参考数据库或者看/@manage/users/edit/{id}的网络日志可能好一些

@anwen-anyi
Copy link
Contributor

并且似乎 // 10: can add qbittorrent tasks这个选项在 user的配置中没有显示?
image

@wintbiit
Copy link
Contributor Author

wintbiit commented Jul 18, 2023

并且似乎 // 10: can add qbittorrent tasks这个选项在 user的配置中没有显示? image

blame alist-web

@anwen-anyi
Copy link
Contributor

anwen-anyi commented Jul 18, 2023

@anwen-anyi
sso_user_group对应的是Casdoor中的用户组,不为空的含义是在该组下的用户才能自动注册,不是role。默认role都是普通用户,因为似乎没有看到其他api有分辨普通用户和游客
sso_default_permission是用户权限,对应在user.go. 前端/@manage/users/edit/{id}下的对应组件是有包装的,但是@manage/settings/sso是自动生成的,对应就只能限制填写位处理后的permission 值

emmm 没太懂哈哈~ 你可以举个栗子么

@anwen-anyi 对于sso_user_group, 如果不为空,那么用户注册时会检查casdoor返回的groups字段,如果groups字段中含有sso_user_group配置的组,那么允许注册

比如,用户名: alist_test,Casdoor groups配置: ["alist_user", "admin"]sso_user_group 填写alist_user或留空,那么用户成功注册;若sso_user_group填写other,则注册失败,报错"user group not allow to register"

对于sso_default_permissionuser.go基本涵盖了,但是不算位运算的话直接参考数据库或者看/@manage/users/edit/{id}的网络日志可能好一些

sso_user_group 指的是组织名称吗?

  • 如果使用了指定的组,那就会注册到指定用户组,如果为就注册到默认在新建单点登录里面配置的用户组
  • 我可以这样理解吧?
    image

sso_default_permission 说实话属实没看懂怎么填,开启不同的选项会出现不同的数字QAQ哈哈~(一般用户有预览下载权限就够了也不需要其他的)

  • 例如我开启 webdav读取和管理 数据库显示的是768
  • 只开webdav管理显示的是512,只开读取显示的是256~
  • 一脸懵逼 哈哈 (好像是 1222222*2 这样相加一起的理解了)

@wintbiit
Copy link
Contributor Author

@anwen-anyi
sso_user_group对应的是Casdoor中的用户组,不为空的含义是在该组下的用户才能自动注册,不是role。默认role都是普通用户,因为似乎没有看到其他api有分辨普通用户和游客
sso_default_permission是用户权限,对应在user.go. 前端/@manage/users/edit/{id}下的对应组件是有包装的,但是@manage/settings/sso是自动生成的,对应就只能限制填写位处理后的permission 值

emmm 没太懂哈哈~ 你可以举个栗子么

@anwen-anyi 对于sso_user_group, 如果不为空,那么用户注册时会检查casdoor返回的groups字段,如果groups字段中含有sso_user_group配置的组,那么允许注册
比如,用户名: alist_test,Casdoor groups配置: ["alist_user", "admin"]sso_user_group 填写alist_user或留空,那么用户成功注册;若sso_user_group填写other,则注册失败,报错"user group not allow to register"
对于sso_default_permissionuser.go基本涵盖了,但是不算位运算的话直接参考数据库或者看/@manage/users/edit/{id}的网络日志可能好一些

sso_user_group 指的是组织名称吗?

  • 如果使用了指定的组,那就会注册到指定用户组,如果为就注册到默认在新建单点登录里面配置的用户组
  • 我可以这样理解吧?
    image

sso_default_permission 说实话属实没看懂怎么填,开启不同的选项会出现不同的数字QAQ哈哈~(一般用户有预览下载权限就够了也不需要其他的)

  • 例如我开启 webdav读取和管理 数据库显示的是768
  • 只开webdav管理显示的是512,只开读取显示的是256~
  • 一脸懵逼 哈哈

@anwen-anyi
不太恰当好像,,sso_user_group是限制用户组用的,指的是用户群租
image
如果指定了 sso_user_group, 那么注册时如果casdoor用户不在这个组中,那么注册失败,似乎alist没有组的概念

sso_default_permission 确实哈哈,因为前端这里没有独立做组件,所以现在是直接写要填进数据库里的permission值

@anwen-anyi
Copy link
Contributor

anwen-anyi commented Jul 18, 2023

sso_user_group我这里没有群组?是需要开通吗?
我的Casdoor版本是拉取的最新的main代码编译出来的~
image

sso_default_permission 搞懂了`
image

@wintbiit
Copy link
Contributor Author

sso_user_group我这里没有群组?是需要开通吗? image

sso_default_permission 搞懂了` image

是的,在这里创建群组,然后为用户添加组就可以

@anwen-anyi
Copy link
Contributor

sso_user_group我这里没有群组?是需要开通吗? image
sso_default_permission 搞懂了` image

是的,在这里创建群组,然后为用户添加组就可以

我的Casdoor好像没群组功能?这个功能在哪里打开,我是新 clone 的 GitHub仓库 master的分支编译的

@wintbiit
Copy link
Contributor Author

sso_user_group我这里没有群组?是需要开通吗? image
sso_default_permission 搞懂了` image

是的,在这里创建群组,然后为用户添加组就可以

我的Casdoor好像没群组功能?这个功能在哪里打开,我是新 clone 的 GitHub仓库 master的分支编译的

不太理解,,,添加群组然后在用户页添加就可以了

@anwen-anyi
Copy link
Contributor

anwen-anyi commented Jul 18, 2023

好吧,找到了为什么没有群组的问题了,但是又双叒叕来了新的问题, 太难啦~
可以看看你怎么填写么~
image

或者可以根据我的Casdoor配置说下我应该在AList后台如何填写Sso user group嘛~
image

@wintbiit
Copy link
Contributor Author

@anwen-anyi 例如:

  1. 在Casdoor中创建组
image
  1. 为用户添加组
image

3.1 若配置sso_user_group 为用户所在的组
image

则正常登录

3.2 若配置sso_user_group 为用户不在的组
image

则触发报错

image

@anwen-anyi
Copy link
Contributor

anwen-anyi commented Jul 18, 2023

你的Casdoor是Windows版本的么~(如果是话可以发我一份么?程序包 配置文件 和前端文件)

我的Casdoor好像又双叒叕缺东西了?
image

以下是我操作的视频步骤

(似乎不能在线观看可以下载观看2M)

QQ2023718-231724-HD.mp4

@wintbiit
Copy link
Contributor Author

@anwen-anyi 你这份无法修改groups似乎是因为casdoor默认groups修改属性为immutable,近期得到修改: casdoor/casdoor#2054 .

没有清除数据库升级的话要需要先修改group修改属性从immutable到admin: 在organizations中修改:
image

@anwen-anyi
Copy link
Contributor

anwen-anyi commented Jul 18, 2023

@anwen-anyi 你这份无法修改groups似乎是因为casdoor默认groups修改属性为immutable,近期得到修改: casdoor/casdoor#2054 .

没有清除数据库升级的话要需要先修改group修改属性从immutable到admin: 在organizations中修改: image

确实是这样,呜呜呜 坑死啦~ 哈哈
不过这个群组在注册的时候会自动添加给用户吗?我看没有自动添加给用户吖~

@wintbiit
Copy link
Contributor Author

@anwen-anyi 你这份无法修改groups似乎是因为casdoor默认groups修改属性为immutable,近期得到修改: casdoor/casdoor#2054 .
没有清除数据库升级的话要需要先修改group修改属性从immutable到admin: 在organizations中修改: image

确实是这样,呜呜呜 坑死啦~ 哈哈 不过这个群组在注册的时候会自动添加给用户吗?我看没有自动添加给用户吖~

@anwen-anyi 依然要在用户页为用户添加组
image

@anwen-anyi
Copy link
Contributor

@anwen-anyi 你这份无法修改groups似乎是因为casdoor默认groups修改属性为immutable,近期得到修改: casdoor/casdoor#2054 .

没有清除数据库升级的话要需要先修改group修改属性从immutable到admin: 在organizations中修改: image

确实是这样,呜呜呜 坑死啦~ 哈哈 不过这个群组在注册的时候会自动添加给用户吗?我看没有自动添加给用户吖~

@anwen-anyi 依然要在用户页为用户添加组

image

也就是说如果填写了组,必须去手动给用户开通是吗?
不写组 直接为空的话倒是不用给用户去开通了😄

@wintbiit
Copy link
Contributor Author

@anwen-anyi 你这份无法修改groups似乎是因为casdoor默认groups修改属性为immutable,近期得到修改: casdoor/casdoor#2054 .

没有清除数据库升级的话要需要先修改group修改属性从immutable到admin: 在organizations中修改: image

确实是这样,呜呜呜 坑死啦~ 哈哈 不过这个群组在注册的时候会自动添加给用户吗?我看没有自动添加给用户吖~

@anwen-anyi 依然要在用户页为用户添加组
image

也就是说如果填写了组,必须去手动给用户开通是吗? 不写组 直接为空的话倒是不用给用户去开通了😄

是的,这个用户组限制的功能就是为了安全性,写了sso_user_group后就必须用户有开通这个组,写空的话就不会检测组

@anwen-anyi
Copy link
Contributor

是的,这个用户组限制的功能就是为了安全性,写了sso_user_group后就必须用户有开通这个组,写空的话就不会检测组

明白啦 谢谢大佬 辛苦了 现在整明白了😄
因为信息不对等绕了好多弯路…尴尬🥲早点休息

@anwen-anyi
Copy link
Contributor

大佬 中午好~ 你看看这样可以不?还有哪里需要补充吗?
image

@wintbiit
Copy link
Contributor Author

大佬 中午好~ 你看看这样可以不?还有哪里需要补充吗?
image

🙏🏻👍🏻👍🏻很强, 应该都覆盖到了,非常感谢写了这么详细的教程!这个pr可能还需要更多的修改,比如是否允许github等sso提供商的自动注册和oidc的相关支持!

@anwen-anyi
Copy link
Contributor

大佬 中午好~ 你看看这样可以不?还有哪里需要补充吗?

🙏🏻👍🏻👍🏻很强, 应该都覆盖到了,非常感谢写了这么详细的教程!这个pr可能还需要更多的修改,比如是否允许github等sso提供商的自动注册和oidc的相关支持!

问题不大,后续修改了在对应的选项修改就行

oidc的单点登录我一直没搞懂怎么用~ 就很尴尬 哈哈

@xhofe
Copy link
Collaborator

xhofe commented Jul 19, 2023

大佬 中午好~ 你看看这样可以不?还有哪里需要补充吗?

🙏🏻👍🏻👍🏻很强, 应该都覆盖到了,非常感谢写了这么详细的教程!这个pr可能还需要更多的修改,比如是否允许github等sso提供商的自动注册和oidc的相关支持!

问题不大,后续修改了在对应的选项修改就行

oidc的单点登录我一直没搞懂怎么用~ 就很尴尬 哈哈

麻烦可以再测试下吗

@anwen-anyi
Copy link
Contributor

大佬 中午好~ 你看看这样可以不?还有哪里需要补充吗?

🙏🏻👍🏻👍🏻很强, 应该都覆盖到了,非常感谢写了这么详细的教程!这个pr可能还需要更多的修改,比如是否允许github等sso提供商的自动注册和oidc的相关支持!

问题不大,后续修改了在对应的选项修改就行
oidc的单点登录我一直没搞懂怎么用~ 就很尴尬 哈哈

麻烦可以再测试下吗

可以的,等Action结束

@anwen-anyi
Copy link
Contributor

好像 build出问题了~

  1. 我看sso_user_group删掉了 这个应该比较安全一些吧?不需要了吗
  2. support all platform 指的是 钉钉微软谷歌GitHub这些页可以了?

@xhofe
Copy link
Collaborator

xhofe commented Jul 19, 2023

好像 build出问题了~

  1. 我看sso_user_group删掉了 这个应该比较安全一些吧?不需要了吗
  2. support all platform 指的是 钉钉微软谷歌GitHub这些页可以了?

漏了个文件

  1. 因为只有CasDoor有
  2. 是的

@anwen-anyi
Copy link
Contributor

anwen-anyi commented Jul 19, 2023

用户名未写入写入数据库

Casdoor注册用户名未写入提示如下错误,其他单点登录应该都会这样?(还未测试其它)

Username is empty
image

image

@xhofe
Copy link
Collaborator

xhofe commented Jul 19, 2023

用户名未写入写入数据库

Casdoor注册用户名未写入提示如下错误,其他单点登录应该都会这样?(还未测试其它)

Username is empty image

image

casdoor忘记给值了 可以先试下其他的

@xhofe
Copy link
Collaborator

xhofe commented Jul 19, 2023

可以不🤔

@anwen-anyi
Copy link
Contributor

anwen-anyi commented Jul 19, 2023

可以不thinking

可以~不过我没微软E5账号了,账号在清明的时候统一被回收了就没申请没测试了
OIDC也没测试,因为我不会用这个 不知道怎么配置的

其它四个是可以的

不过有个疑惑,好像是根据sso_id来判断的是吧? 我把名字改了下然后点击了解除绑定再去登录发现不受影响,我把sso_id改了下再去登录它就新建了一个新的用户
image

@xhofe
Copy link
Collaborator

xhofe commented Jul 19, 2023

可以不thinking

可以~不过我没微软E5账号了,账号在清明的时候统一被回收了就没申请没测试了

其它四个是可以的

不过有个疑惑,好像是根据sso_id来判断的是吧? 我把名字改了下然后点击了解除绑定再去登录发现不受影响,我把sso_id改了下再去登录它就新建了一个新的用户 image

sso_id必须是唯一的

@anwen-anyi
Copy link
Contributor

anwen-anyi commented Jul 19, 2023

sso_id必须是唯一的

嗯呐,也就是说 使用SSO注册的 username只是一个备注作用

@anwen-anyi
Copy link
Contributor

OIDC也没测试,因为我不会用这个 不知道怎么配置的

@xhofe
Copy link
Collaborator

xhofe commented Jul 19, 2023

在alist中 username也是唯一的,如果两个账户的username相同 应该是无法自动注册

@anwen-anyi
Copy link
Contributor

在alist中 username也是唯一的,如果两个账户的username相同 应该是无法自动注册

是这样的会有提醒,我给忘记了

{
  "code": 400,
  "message": "UNIQUE constraint failed: x_users.username",
  "data": null
}

@anwen-anyi
Copy link
Contributor

微软OIDC这两个你试过了么~

@xhofe
Copy link
Collaborator

xhofe commented Jul 19, 2023

微软OIDC这两个你试过了么~

🈚

@wintbiit wintbiit changed the title feat: SSO auto register for Casdoor feat: SSO Auto Register Jul 19, 2023
@xhofe xhofe merged commit de8f9e9 into AlistGo:main Jul 20, 2023
1 check passed
@welcome
Copy link

welcome bot commented Jul 20, 2023

Congrats on merging your first pull request! We here at behavior bot are proud of you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants