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中添加用户,该用户即有登入的权限。如果需要分享文件或文件夹,则需要手动输入完整的邮箱地址,即可完成分享的工作。