单点登录 - 最佳实践

4
我需要为多个站点构建可扩展的单点登录机制。场景如下:
- 中央Web应用程序用于注册/管理帐户(位于欧洲的服务器)。 - 几个Web应用程序需要对我的用户数据库进行身份验证(位于美国/欧洲/太平洋地区的服务器)。
我使用MySQL作为数据库后端。我想到的选项是要么在所有服务器上复制用户数据库(数据安全性?),要么允许服务器通过在my.cnf中显式允许来自其IP的连接直接连接到我的MySQL实例(高负载?单点故障?)。
为所有Web应用程序提供可扩展和低延迟的单点登录的最佳方式是什么?从数据安全性的角度来看,将用户数据库复制到所有Web应用程序上是否是一个好主意?
注意:所有Web应用程序都提供API,用户可以使用该API将小部件嵌入其自己的网站。这些小部件通过令牌认证机制工作,该机制也需要对我的用户数据库进行身份验证。
2个回答

3
我不会在数据库层面上集成身份验证,例如复制数据库或允许其他服务器访问。这可能会变得难以维护。我更喜欢一种松耦合的方法,通过在中央服务器上公开一个简单的服务来让其他应用服务器运行身份验证请求。
您应该研究以下问题(可能还有更多):
- 如何避免服务器之间密码明文传输 - 如果应用程序服务器网络从同一IP验证所有用户,则可能无法限制服务速率,因此您可能希望限制对某些客户端的访问,以避免恶意机器大规模探测有效帐户。 - 如何集中强制执行诸如会话过期之类的事项 - 如何处理/避免服务停机
可能有用的技术:
- Cryptographic CRAM(避免密码传输) - 证书(证明客户端的身份)

或者,您可能希望客户端使用中央服务获取令牌,然后将其提升并由目标服务器验证。有类似工作的架构(例如Kerberos票证服务器),可以作为灵感。


伟大而有用的输入 - Darren

0

你应该选择Oauth2或SAML。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接