「记录」群晖DSM7 SSO客户端对接Authing服务

为了方便老师登陆各种院内系统,跟学院申请购买了Authing的统一身份认证服务。其他购买的系统都可以让开发方对接,唯一麻烦的就是群晖的DSM,只能自己来了。

最终目标是想实现每一个用户,网页登陆群晖(及任何一个学院购买的系统)的时候直接微信扫码登陆,无需输入用户名密码。群晖相较于其他系统还有一个不同点,就是SMB服务必须输入用户名密码,所以要么从Authing直接获取带密码的用户信息,要么就得让从Authing登陆的用户能自己改密码。

关于群晖DSM的SSO客户端功能的资料非常少,群晖官方也是几句就把用户打发了,而且群晖公司从销售到技术都透着一股傲然于世的气息(虽然我打心眼里觉得他家NAS做的确实很好,但这种自以为已经能拳打EMC、脚踩HPE的态度实在让人想踩死他)。找遍全网只找到这篇资料比较靠谱,而且这篇资料的最终目标和我出奇的匹配,甚至我怀疑他也是和Authing对接。鉴于现在的局域网环境,我还是把原文截图转发过来。

参考资料

虽然上面的资料和我的目标几乎完全相同,但这篇文章并没有详细描述所有在操作过程中可能遇到的坑,因此我觉得有必要记录一下我的踩坑过程。

1、群晖DSM7不支持用从SSO服务器获取的用户信息自动注册本地用户

这也是上述资料第一段所说的。详细解释就是:一个在Authing里设置好的用户,在登陆DSM之后,DSM并不会为这个用户自动创建一个本地用户,更不要提把这个本地用户和Authing的用户进行关联。这会导致一系列的麻烦,比如这个用户怎么设置DSM里共享文件夹的访问权限、这个用户怎么使用SMB服务等,这些问题很容易被忽略但又很致命(我一开始就没注意资料里第一段写了啥,都弄完才发现很重要)。

解决方法:先把DSM加入Authing的LDAP域,让DSM获取到Authing里配置好的用户、群组等信息,然后同时启用SSO客户端,并用一个唯一值进行用户关联。

2、群晖DSM本地用户和域用户冲突

当DSM本地和Authing用户池里同时有一个用户名为“张三”的用户时,会发生冲突。“张三”用户使用SSO方式进行登陆时,DSM会提示用户名密码错误。具体原因大约只有群晖工程师能解释,但我猜测是DSM没有将域用户和本地用户进行区分,导致用SSO登陆的重名用户匹配到本地用户鉴权信息上,最后鉴权失败。

解决方法:保证用户池里所有的用户名都不会出现在本地用户里。

3、配置DSM的LDAP客户端

服务器信息
LDAP信息
自定义配置文件
检测

配置LDAP客户端的最后一步是检测,会提示“不支持Samba架构”。这是由于Authing的LDAP实现问题,必须开启DSM的“启用 GIFS 明文密码验证”功能,才能通过检测。此处建议不开启,因为开启之后有安全风险。所以点详情,然后跳过。

不启用GIFS 明文密码验证

之后还会提示另一个问题,同样方式处理,跳过。最后完成所有检测之后,点击确定。

4、在Authing添加自定义应用

添加自定义应用

往下找到认证配置,修改登陆回调地址!然后再点击其他配置!

【注意】在其他配置中只修改id_token签名算法!!!其余保持不变!完成后保存

5、配置DSM的SSO客户端

到此,就完成了所有操作,可以尝试使用Authing登陆DSM了!