在过去的一个小时里,我一直在研究这个话题,所以我想我只会问我所有的具体问题。我正在构建一个web应用程序,目前使用Laravel (PHP)的API和角为前端。我看过oAuth,但它有点让人望而生畏,所以我希望实现一个更简单的解决方案,然后在必要时重新构建它。
我目前实现的流如下所示。角将用户凭据(通过https)发布到我的rest后端,这只是返回生成的字符串(这可能是随机生成的或超低温生成的)。然后将该字符串存储为cookie或任何我认为合适的浏览器状态,然后附加到每个API请求以及作为额外参数或请求头之类的用户id。API使用它来检查用户是否能够访问所请求的资源并相应地作出响应。我可能还会在字符串上添加一个到期时间,在每次请求之后都会重新设置。
我的问题是,这是否是一个可以接受的流程?在安全方面,我最有可能面对的问题是什么?CSRF?会话固定?
我知道这是一个曾经被问过几次的问题,但我只是希望能有一个新的讨论,并被指向相关的信息。
发布于 2014-09-24 12:55:08
谢谢大家的投入。最后,我决定按照建议再次查看OAuth 2。我想要创建的是一个OAuth流.我看了其他人在PHP中的OAuth实现(和Laravel),而不是试图重新创建轮子,而这个实际的实现确实帮助我获得了这个想法。
我最后用了这个包
https://github.com/thephpleague/oauth2-server
包扎成龙舌兰
https://github.com/lucadegasperi/oauth2-server-laravel
我有点不确定如何为我的用例实现OAuth,因为它只是用于内部使用。我发现,由于我对客户机有很高的信任,一个很好的流程就是授予Resource凭据。
我现在面临的唯一真正问题是保护客户端id和客户端机密。它存储在客户端肯定是一个问题,但据我理解,这只是OAuth的问题之一。幸运的是,如果它被破坏了,我可以撤销和重新发布。
任何遇到类似问题的人都应该查看以下链接:
http://alexbilbie.com/2013/02/a-guide-to-oauth-2-grants/
https://www.rfc-editor.org/rfc/rfc6749
他们真的帮助我理解了OAuth 2。
发布于 2014-09-18 20:37:51
如果我对您的理解是正确的,那么这是我在许多API中看到的模型,特别是在无状态SOA世界中。您所指的“字符串”通常称为"auth令牌“。而且所有非公共API方法都要求令牌(并且它是有效的--过期是必不可少的,否则某人可以获取一个旧令牌)包含在每个请求中(不管有没有用户名--这个令牌应该是唯一的标识,这样就没有必要了,但它并不有害),这意味着在您做任何事情之前,您必须先调用Login API (它不需要令牌,natch)才能在做任何事情之前获得一个令牌。
您可能希望每次使用时都刷新令牌的过期(空闲超时),或者需要让客户知道他们可能需要每隔一段时间刷新一次令牌(即获得一个新的令牌)(这比空闲超时稍微安全一些)。
发布于 2014-09-19 19:48:21
您所描述的是某种基本的会话实现。因为REST有一个无状态约束来否认这些东西,所以我不认为这是一个可以接受的解决方案。Afaik您必须将用户名和密码与来自可信任客户端的每个请求一起发送。如果您有第三方客户端,那么您必须为它们生成api密钥和访问令牌(OAuth可以解决该部分)。如果您想了解更多关于REST约束的信息,请阅读野战论文。
https://stackoverflow.com/questions/25917860
复制相似问题