我非常高兴地阅读了问题的答案讲座:什么可以准确识别网站访问者?。在此过程中,本讲座回答了以下问题:“最流行的身份验证/授权策略是什么?”以及算法的大概描述。好吧,在这个问题上,我想考虑一个更复杂的情况 - 多个应用程序的单一身份验证。
假设我们正在开发 Google Apps 或 Microsoft Office 的类似产品。我们的应用程序(例如 Microsoft Word(例如 N-Docs)或 Google Spreadsheets(例如 N-Spreadsheets))可以作为本机应用程序下载,也可以使用精简的 Web 版本。由于这些应用程序来自同一制造商,因此可以组织单个认证/授权中心。
问题是:什么样的认证策略是合适的,以便一个应用程序中的授权自动执行同一制造商的所有应用程序中的授权?
我们可以肯定地说这是可能的,因为谷歌以某种方式成功了(在网络应用程序的情况下,当然,并且最有可能的是在本机 Andorid 应用程序的情况下)。但这里使用什么身份验证策略呢?
- 就网络而言,我们为每个站点单独存储 cookie,并且我们将在不同的域或子域上拥有应用程序。
- 对于本机应用程序,我们将在系统目录中为每个应用程序拥有一个单独的文件夹,并且无法轻松访问其他应用程序的文件夹。
显然,这要求应用程序具有配置和授权信息的公共存储。
在网络上,如果您的所有产品都位于子域中,那么您可以向它们写入一个全局 cookie,每个人都可以通过
*.mysite.com
.还有单点登录 (SSO) 技术,在 wiki和Habré 的评论中已经提到过。简而言之,其想法是所有其他应用程序都通过证书信任一个身份验证服务器。在任何操作系统中,都有很多选项可以放置此内容:至少是用户目录。它可以由代表其运行的任何应用程序读取和写入,无论是在 Windows 还是 Linux 中。
特别是,Windows有一个
appdata
世界上每个人都可以读取的文件夹。与注册表分支相同的事情HKEY_CURRENT_USER\Software\
在Linux中,沿路径存储数据是常见的做法
~/.config/program_name
,在MacOS中似乎也是如此,users\shared
但我对后者并不完全确定。以通用形式,您可以在那里创建目录
\vendor_name\program_name1
等\vendor_name\program_name2
。并将您想要在应用程序之间共享的任何数据存储在\vendor_name\
.当然,您不应该以明文形式存储敏感数据,而只能加密,以便只有您的应用程序可以使用它。Android 有专门的工具
AccountManager
来Keychain
存储帐户和证书。 iOS 和 macOS 也有Keychain
.