如何以restful方式实现身份验证?
我正在使用python在web应用程序google app engine上构建一个图片日志。用户可以注册并将图片发布到日志中 此外,我正试图尽可能多地遵循其余的做事架构 web应用程序的身份验证方案如下所示:如何以restful方式实现身份验证?,rest,service,authorization,Rest,Service,Authorization,我正在使用python在web应用程序google app engine上构建一个图片日志。用户可以注册并将图片发布到日志中 此外,我正试图尽可能多地遵循其余的做事架构 web应用程序的身份验证方案如下所示: 1.从前端发布用户名/密码 2.如果身份验证成功,后端将设置cookie 3.其余的AJAX调用使用此cookie进行身份验证 有没有办法不使用cookies就遵守REST 现在,我还在构建一个android应用程序,用户可以登录并发布/查看他们的图片日志。我需要公开web应用程序数据存储
1.从前端发布用户名/密码
2.如果身份验证成功,后端将设置cookie
3.其余的AJAX调用使用此cookie进行身份验证 有没有办法不使用cookies就遵守REST 现在,我还在构建一个android应用程序,用户可以登录并发布/查看他们的图片日志。我需要公开web应用程序数据存储中的数据,因此我将构建一个web服务来从数据存储中获取数据 android客户端的身份验证方案:
选项a
1.通过https将用户名/密码发布到web服务
2.Web服务返回唯一的授权令牌(将令牌存储在数据存储上的username/pwd表中)
3.通过将此令牌添加到请求的请求标头来请求后续服务
4.服务器将令牌映射到username/pwd表,并在找到令牌时返回数据
5.授权令牌在一段时间后过期 选项b
1.在客户端和服务器端设置密钥
2.在每个请求的授权头中使用“用户名:密码和密钥哈希”
3.服务器通过使用相同的哈希算法从哈希值提取密码来生成密码;如果成功,则返回数据
顺便说一句,我不想使用基本授权,因为它存在安全漏洞 哪个更好 有没有其他更好的方法来完成我想做的事情?顺便说一句,安全是我非常关心的问题。
如果有人对这个问题有任何见解,我将不胜感激。谢谢
我自己也在做一些研究,想知道什么是最好的解决方案。我认为2条腿的oauth可能会像Leonm建议的那样在我的情况下起作用。
在这种情况下,服务器必须向客户端提供消费者密钥/密码,在我的情况下,该密钥/密码在应用程序中是硬编码的 现在的步骤是:
1.使用oauth_参数(使用者密钥、签名方法、时间戳)、请求url、请求参数和密码生成签名。
2.在发出请求时包括签名、oauth参数。
3.服务器通过再次生成签名来验证请求,但在这种情况下,它使用与密钥对应的密钥 我认为这样我就相当于确认了其余的原则。据我所知,服务器是空的
这样做的利弊是什么 您可以结合使用HTTPS和HTTP基本身份验证。两者都是现有的标准,在一起使用时应该足够安全。以标准的方式完成您想要做的事情 如果“安全是一个问题”,那么我会说,使用开放标准和库来实现您想要的功能会更好。主要原因是如果你自己做,你很可能会忘记一些事情;这些标准有很多人在关注它们,寻找漏洞 您的选择包括(增加复杂性) 基本身份验证和HTTPS 一切都是加密的,这使得压缩或查看变得不可能,这在一定程度上增加了开销,在服务器上使用了更多的马力,在客户端可能使用了更多的电池电量。易于实现,因为它得到了库的良好支持 摘要认证 未加密的消息通过网络传输,但身份验证在授权标头中安全管理。有关更多信息,请参阅 非统组织 请参阅如何为已安装的应用程序提供OAuth。我相信这不是您想要的,因为您不要求在应用程序之间共享数据,而只是验证用户 滚你自己的 如果你想推出自己的,我建议看看谷歌(现在已经弃用了?)过去是如何运作的
编辑:虽然我不确定,但谷歌似乎不太可能有一个包含所有认证令牌的表;他们令牌的长度表明令牌是某种加密消息,证明持有该令牌的人在某个时间确实在某个领域提供了真实的凭据。我没有公开web服务除了我自己正在构建的android应用程序之外,我正在使用android UI toolkit构建登录页面。据我所知,OAuth是在您希望将用户数据公开给其他应用程序时使用的