我是楼塔的基于网络的应用程序与宁静的API,目前没有任何身份验证。所以我打算实现,和为了避免所有的困难,并注意与存储用户密码,我想到使用OpenID进行认证。什么是最好的方式做到这一点?这两个事兼容吗?是否有现有的其余Api使用OpenID,我可以采取灵感?

有帮助吗?

解决方案

现在我已经花了一些时间研究的选择和想总结调查结果。第一,多一点的背景下--我的开发和控制服务和API消费者。消费者是闪为基础的应用程序提供的相同的主API是现在,应该是使用浏览器。没有第三方客户的视线。

所以这个问题可以分为两部分,

  • 我该怎么做的OpenID身份验证通过API
  • 我怎么保持的"经认证的"国家在随后的请求

对于第一部分,OpenID认证的几乎总是包括互动步骤。在身份验证过程中没有将最有可能的步骤,其中用户是在OpenID提供者的网页上,签署和紧迫的一些"我同意"的按钮。所以API不能也不应该处理这种透明地(没有"告诉我你的OpenID提供商和密码和我做其他的").最好能做的就是通过提出和回HTTP链接那个客户已经打开和后续的指示。

维持"认证"的状态

其余Api应该是无国籍,每一个要求应该包括所需的所有信息来处理它,对吗?它不会使任何有意义进行身份验证OpenID提供为每一个要求,所以 一些 种会议是必要的。一些选择的通信会议的关键(或"接入令牌"或用户名/密码):

  • HTTPS+基本的验证("授权:基本..."标题中的每一个请求)
  • 签名的请求 亚马逊风格 ("授权:AWS..."头在每个请求)
  • 保护身份验证:获得接入令牌,包括就和很多其他的参数,在每个请求
  • Cookie存储届会议的关键("Cookie:..."头在每个请求)
  • 签署cookie存储届会议信息的在cookie本身

只有一个API消费者的权利,所以我选择了走对于最简单的事情,可能工作--饼干。他们是超级-方便使用在塔,有帮助的 烧杯.他们也"只是工作"的闪光应用程序--由于它的内部运行浏览器,浏览器将包括有关饼干请求,闪光应用程序,使得--该应用程序不需要改变在所有与尊重。这里有一个计算器问题,也提倡使用cookies: 宁静的认证网络的应用程序

烧杯还有不错的功能 饼干只会议 在所有届会议数据是包含在cookie本身。我猜这个是关于为无国籍,因为它得到。那里是 没有 会议储存在服务器上。饼干都签署和选择地进行加密,以避免窜改与它们在客户面。其缺点是,cookie变得大一点的,因为它现在需要存储更多的不仅仅是会话的关键。通过删除一些东西我真的不需要在本届会议(剩菜OpenID认证)我的饼干尺,下降到大约200字节。

其他提示

保护身份验证 是一个更适合API使用情况。这里有一个例子的护身份验证中使用蟒蛇: 保护身份验证-蟒蛇-twitter.莉亚的卡尔弗的 蟒蛇-护身份验证 图书馆是规范的执行情况的护身份验证Python,但是 蟒蛇oauth2 最近的竞争者得到一些嗡嗡声。作为灵感, django的活塞 支持使用保护身份验证做到的授权时,创造安宁的Api决,虽然该文件是不是很好因为我喜欢那个特定的主题。

如果你建立API,你可以检查OAuth协议。它的互补的OpenID。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top