网站和原生应用用户授权

时间:2013-05-15 02:14:24

标签: authorization cross-platform native

我希望创建一个与facebook或pokerstars非常类似的功能,如果你之前使用过它们的话。基本上,应用程序要求用户登录,并且可以从浏览器以及本机和Web应用程序访问其信息。

我该如何实现这一目标?请建议研究哪些服务来实现这一目标。以我目前的理解。我将用html和php创建网站,并使用RESTful协议创建一个web服务,并将它们托管在amazon aws服务器上。然后我可以连接到本机应用程序中的这些服务器?我不太清楚本机应用程序如何与服务器交互

如果您知道任何特定协议或更好的服务器托管服务,请告诉我。

1 个答案:

答案 0 :(得分:0)

如果我正确地解释你的问题,你正在寻找这样的事情:

  1. 用户启动您的浏览器应用或您的原生应用(可能是移动应用)
  2. 由于用户还没有帐户,因此您需要使用适当的对话框来创建帐户。
  3. 然后,您要求“身份服务”为该用户创建个人资料
  4. 身份服务返回用于访问的令牌
  5. 这是我们一直在移动网络行业所做的事情。从技术上讲,我们有TAC / ACS或HSS配置文件服务,但在任何一种情况下,都是一样的 - 专用服务和网络流程:

    1. 接受来自不同客户(网络,移动设备,桌面...)的连接
    2. 在数据库CRUD(创建,读取,更新,删除)模型中有各种原语
    3. 答案请求数据库
    4. 如果你想要一个预配置的解决方案,你可以使用任何带有RESTstyle连接器的网络数据库(例如MongoDB?)但是你也可以在与NoSQL或SQLLite数据库对话的过程中通过它。最终结果是一样的。

      对于商业解决方案,我可能喜欢OpenStack,因为您可以在其上运行代码,并且他们拥有您可能能够CoOpt的身份代理。

      就个人而言,我只是在像Amazon的EC2那样的某个云上运行数据存储区,它可以回复RESTful请求,例如:

      • 创建具有给定个人资料集的用户,返回唯一标记
      • 删除给定令牌的用户
      • 更新给定令牌的个人资料元素

      我在这里遗漏了安全等必要的东西,但你明白了。

      这样做的另一个好处是,您可以为所有应用程序/应用程序服务提供单一身份服务。给定应用程序元素的细节只是配置文件中的子字段。这不仅为您提供了适用于Web,桌面和移动设备的通用身份代理,还为您的所有应用程序提供了单点登录。用户登录一次并对您拥有的所有内容进行身份验证。从一个站点移动到另一个站点,现在变得无缝。

      最后,您将应用程序的身份管理,备份,安全令牌管理等放置在外部。如果您以后想要为第二因素身份验证添加Google身份验证器,则不必将其添加到您拥有的每个应用程序中。

      我还要补充一点,您不希望将身份数据库保留在直接互联网连接点上。有人可能会让你的生活变得困难,并在以后得到它。相反,您希望您的身份服务器具有私有链接。然后做这样的事情:

      • 创建帐户时,不要存储密码,存储哈希 - 更安全
      • 让您的应用程序(网络或其他方式)计算密钥作为登录

      在这种情况下,用户可能会输入用户名和密码,但应用程序或网站会将其转换为令牌。这就是你发送的内容。

      • 接下来,使用该令牌(以及合适的安全魔术),使用THAT作为所有者密钥
      • 将该密钥发送到数据存储区并检索所需的任何值
      • 使用令牌
      • 将它们加密回blob
      • 发送块
      • 应用程序解密blob以获取值

      为什么我们这样做?

      首先,如果有人试图访问您的身份数据库,那么没有什么用处。它仅包含用于登录的不透明令牌和加密数据的blob。来吧 - 拿数据库。我们不在乎。

      其次,嗅探传输会让攻击者一无所获 - 再次,它都是加密的blob。

      这意味着稍后,如果您有五个使用代理的应用程序,并且有人攻击网络并窃取数据库,您就不在乎了,因为您的用户从未首先提供登录名和密码,即使他们这样做了,没有用户密钥的人数据本身就是垃圾。

      这有帮助吗?