Seafile接入微软单点登录(OAuth)

注意:这并不是完美解决方案,且部分登录方式未经测试。

首先,接入微软单点登录(OAuth)的目的是可以用微软账号登录Seafile,免去手动在Seafile注册管理之类的问题,同时如果在微软那边设置“仅我的组织”可以使用,还可以避免无关人士乱注册浪费资源。

Seafile版本7.0.5,系统CentOS 7,Web服务器nginx 1.18.0,此套配置目前的问题在最后有提到,下面进入正题:

首先,微软的OAuth系统并不像GitHub那样直接在个人账户下注册就可以使用,我们首先需要在微软Azure(我这里用的国际版)中的Azure Active Directory中创建一个租户(如果已有非个人账号租户可以跳过创建这步,国家/地区可以选择Hong Kong,因为没有中国大陆),创建完成后切换过去。

接下来选择应用注册->新注册

新注册

受支持的账户类型我这里选择是仅此组织的目录,其他的没有经过测试。

账户类型

重定向URL填写https://seafile.yourdomain.xx:port/oauth/callback/,其中必须是https链接,port如是默认的(443)可以省略,创建完成后我们需要记下“应用程序(客户端) ID”和“目录(租户) ID”,配置时需要用到。

接下来创建客户端密码,在证书和密码->新客户端密码,添加完后记录下来,配置时需要用到。

客户端密码

至此,微软侧的基础配置已经完成,下面说明seafile的配置,打开/path/to/seafile_root_dir/conf/seahub_settings.py(按照官方推荐配置的话/opt/seafile/conf/seahub_settings.py),追加以下内容(其中[your_client_id]替换为刚才记下的“应用程序(客户端) ID”,[your_client_secret]替换为客户端密码,[your_tenant_id]替换为“目录(租户) ID”,[your_redirect_url]换成实际的重定向URL):

ENABLE_OAUTH = True

# Usually OAuth works through SSL layer. If your server is not parametrized to allow HTTPS, some method will raise an "oauthlib.oauth2.rfc6749.errors.InsecureTransportError". Set this to `True` to avoid this error.
OAUTH_ENABLE_INSECURE_TRANSPORT = True

# Client id/secret generated by authorization server when you register your client application.
OAUTH_CLIENT_ID = "[your_client_id]"
OAUTH_CLIENT_SECRET = "[your_client_secret]"

# Callback url when user authentication succeeded. Note, the redirect url you input when you register your client application MUST be exactly the same as this value.
OAUTH_REDIRECT_URL = '[your_redirect_url]'

# The following should NOT be changed if you are using Github as OAuth provider.
OAUTH_PROVIDER_DOMAIN = 'login.microsoftonline.com'
OAUTH_AUTHORIZATION_URL = 'https://login.microsoftonline.com/[your_tenant_id]/oauth2/v2.0/authorize'
OAUTH_TOKEN_URL = 'https://login.microsoftonline.com/[your_tenant_id]/oauth2/v2.0/token'
OAUTH_USER_INFO_URL = 'https://graph.microsoft.com/oidc/userinfo'
OAUTH_SCOPE = ["profile", "openid", "User.Read", "email"]
OAUTH_ATTRIBUTE_MAP = {
    "email": (True, "email"),
    "id": (False, "not used"),
    "name": (False, "name")
}

保存后重启seahub应该就可以正常使用了。

不过这么着整下来,使用邮箱邀请的用户正常,但在Azure创建应用的人并不能使用单点登录,同时域内的以onmicrosoft.com结尾的账号也不可使用,原因是https://graph.microsoft.com/oidc/userinfo这个API对于管理员和域内非邀请账户不返回email,同时在Azure AD的用户管理中,这些用户的邮箱为空且无法编辑,目前(2020.08.23)无解。所以如要添加人员使用单点登录,目前只能使用邮箱邀请。

如不能正常使用,提示出错了,请联系管理员,可以查看seahub的log(默认路径:/opt/seafile/logs/seahub.log)排查问题。

Visits: 147

发布者:Tabing010102

???

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据