authentication - 单点登录 - 最佳实践

标签 authentication architecture

我需要为多个站点构建一个可扩展的单点登录机制。设想:

  • 用于注册/管理帐户的中央 Web 应用程序(欧洲服务器)
  • 几个需要对我的用户数据库进行身份验证的 Web 应用程序(美国/欧洲/太平洋地区的服务器)

  • 我使用 MySQL 作为数据库后端。我想出的选项要么是在所有服务器上复制用户数据库(数据安全?),要么允许服务器直接连接到我的 MySQL 实例,方法是在 my.cnf 中明确允许来自其 IP 的连接(高负载?单点故障) ?)。

    为所有 Web 应用程序提供可扩展且低延迟的单点登录的最佳方式是什么?在数据安全方面,跨所有 Web 应用程序复制用户数据库是否是一个好主意?

    注:所有 Web 应用程序都提供一个 API,用户可以使用该 API 将小部件嵌入到他们自己的网站中。这些小部件通过 token 身份验证机制工作,该机制将再次需要针对我的用户数据库进行身份验证。

    最佳答案

    我不会在数据库级别集成身份验证,如复制数据库或允许从其他服务器访问。这可能变得难以维护。我更喜欢松散耦合的方法,通过在您的中央服务器上公开一个简单的服务,让其他应用程序服务器运行身份验证请求。

    您应该研究以下问题(可能更多):

  • 如何避免服务器间密码明文传输
  • 如果应用程序服务器网络从同一 IP 对所有用户进行身份验证,您可能无法限制该服务,因此您可能希望限制对某些客户端的访问,以避免流氓机器大规模探测有效帐户。
  • 如何集中执行诸如 session 过期之类的事情
  • 如何处理/避免服务停机

  • 可能有用的技巧:
  • Cryptographic CRAM (避免密码传输)
  • Certificates (证明客户身份)

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

    关于authentication - 单点登录 - 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2962918/

    相关文章:

    authentication - nginx代理认证拦截

    authentication - 在 Mysql 5.7 中更新用户密码

    node.js - 具有事件目录权限的nodejs网站

    c# - 开发基于 Web 的应用程序进行销售时需要考虑哪些常见问题

    mysql - 无法登录到 unix mysql 用户

    c# - AuthenticationHeaderValue 中的冒号字符

    python - 通知容器对象 : best practices

    javascript - 将数据从 PHP 传递到 JS : in cases of displaying huge amounts of data

    architecture - 可扩展性对您意味着什么?

    ios - iOS中从中央服务器查询大量数据的建议