我正在寻找构建一些移动应用程序。因此,这些应用程序将通过JSON和REST(例如put,post等)与我的服务器“交谈”。
如果我想确保客户端手机应用程序尝试执行需要某些“许可”的操作,那么人们如何处理此问题?
例如:
我们的网站销售东西 - >电视,汽车,连衣裙等api会 允许人们浏览商店并购买商品。要买,你需要 要“登录”。我需要确保正在使用的人 他们的手机真的是他们。
如何做到这一点?
我已经看过Twitter如何使用他们的OAuth ...而且看起来他们在REQUEST HEADER中有很多值?如果是这样(我有点像这种方法),我是否可以使用另一个第三方作为存储用户名/密码的网站(例如,Twitter或Facebook是OAuth提供商)..而我所做的就是以某种方式检索自定义标题数据..并确保它存在于我的数据库.. else ..让他们与他们的OAuth提供商进行身份验证?
还是有另一种方式吗?
PS。我真的不喜欢拥有API密钥的想法 - 我觉得它可以很容易地交给另一个人使用(我们不能承担风险)。
答案 0 :(得分:9)
我们的网站销售东西 - >电视,汽车,连衣裙等api会 允许人们浏览商店并购买商品。要买,你需要 要“登录”。我需要确保正在使用的人 他们的手机真的是他们。
如果这确实是一项要求,那么您需要在系统中存储用户身份。最流行的身份跟踪形式是通过用户名和密码。
我已经看过twitter如何使用他们的OAuth ......以及它 看起来他们在REQUEST HEADER中有很多值?如果是这样 (我喜欢这种方法),我可以使用它 另一个第三方作为存储用户名/密码的网站(例如 Twitter或Facebook是OAuth提供商)..我所做的就是 以某种方式检索自定义标头数据..并确保它存在于 我的db .. else ..让他们与他们的OAuth提供商进行身份验证?
你在这里混淆了两种不同的技术,OpenID和OAuth(不要感觉不好,许多人都会因此而惹恼)。 OpenID允许您推迟向提供程序标识跟踪和身份验证,然后在您的应用程序中接受这些身份,如 acceptor 或依赖方。另一方面,OAuth允许应用程序(消费者)访问属于另一个应用程序或系统的用户数据,而不会损害其他应用程序的核心安全性。如果您希望第三方开发人员代表您的用户访问您的API(这不是您已声明要做的事情),那么您就会站出OAuth。
对于您声明的要求,您绝对可以看一下将Open ID集成到您的应用程序中。有许多库可用于集成,但由于您要求不可知的答案,我不会列出任何一个。
还是有另一种方式吗?
当然。您可以在系统中存储用户ID,并使用basic或digest身份验证来保护您的API。基本身份验证只需要一个(容易计算的)额外标头:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
如果您使用基本身份验证或摘要身份验证,请确保您的API端点受SSL保护,否则可以轻松地通过无线方式嗅探用户凭据。您还可以通过信用卡信息获取用户身份识别,并在结账时有效地对用户进行身份验证,但这是一个判断呼叫。
答案 1 :(得分:3)
由于RESTful服务使用HTTP调用,出于安全目的,您可以在HTTP Basic Authentication上进行中继。它简单,直接,并且已经支持该协议;如果您不想在传输中获得额外的安全性,则可以使用SSL。像IBM Websphere Process Server这样成熟的产品使用这种方法。
另一种方法是根据您的应用程序需求构建自己的安全框架。例如,如果您的服务只是被某些设备使用,您可能需要将编码的令牌作为标题发送到线路上以验证请求来自授权来源。亚马逊有一种有趣的方法,你可以检查它here。