0x01 前言
几小时前发布了一篇文章:
只要尝试过SSO的便捷之后,再也回不去手动添加用户也给用户修改密码的时代。个人和企业经常使用的nextcloud也有相应的app支持SAML。需要注意的是,SAML是一个标准,只是我使用Azure AD,还有其他厂商提供类似的服务,而且都很优质。
0x02 准备
首先需要准备一套nextcloud环境,在这里我使用docker的版本用于演示,其次还需要有一个企业级的Office 365授权以便使用Azure AD的一些功能。
docker版的nextcloud开箱即用,只需要配置好ingress即可:
在这里我使用以下域名:
- nextcloud.dev.enginx.net
然后登入nextcloud并进入app管理页面:
在顶部的搜索栏中查找SSO,选中并安装 SSO & SAML authentication:
如果搜索不出该插件,请更换到一个稳定可靠的网络环境并多次尝试。
0x03 Azure AD
完成后来到Azure AD的管理页面,创建一个企业应用程序并填入相关的内容,具体请参考以下文章:
在基本SAML配置中填写以下信息:
- 标识符:https://nextcloud.dev.enginx.net/apps/user_saml/saml/metadata
- 断言URL:https://nextcloud.dev.enginx.net
然后下载联合元数据XML并记下文件内的X509证书内容,最后复制登陆URL、Azure AD标识符和注销URL备用。
紧接着单击用户属性和声明框中右上角的小笔图标,将值为 user.userprincipalname的声明名称记下备用,其实这个是通用的,具体如下:
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
我们还需要来到用户和组标签添加用户:
这个用户不一定需要在同一个AD域下,当添加其他域用户的时候会发出邀请邮件,被邀请的用户确认后即可通过Azure AD使用该企业应用程序。
至此,Azure的部分均已完成。
0x04 Nextcloud
确认插已启用,然后进入设置页面:
然后进入该插件的设置页面并单击使用内置SAML认证:
- 映射到的UID属性:http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
- ldP标识符:Azure AD 标识符
- 验证请求:登录 URL
- SLO请求:注销 URL
- X509证书:XML内的X509证书
- 将电子邮件映射到属性:http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
默认情况下,nextcloud会使用Office 365的账号进行认证,而不会弹出认证表单,如果需要使用原来的验证表单,比如使用admin用户登入时,需要手动添加后缀,如:
http://nextcloud.dev.enginx.net/login?direct=1
0x05 结语
使用也非常简单,首先在Azure AD中添加用户,该用户即有登入的权限。如果需要分享文件或文件夹,则需要手动输入完整的邮箱地址,即可完成分享的工作。