我想建立以下项目:
实际上,在我的架构中有三个方面:前端,它是后端的客户端,后端和希望在前端登录页面上进行身份验证的用户。
保护参与该体系结构的三方的最佳方法是什么?
事实上,我认为如果我在javascript中完成所有事情,就不可能在前端执行一个安全的应用程序,所以我打算将身份验证/授权委托给服务器前端的代理层。
我的问题是,我不知道如何使用OAuth执行这个工作流:
而且我还希望我的REST后端可以被任何其他第三方应用程序访问,并使用OAuth。
剩下的后端要用两条腿还是三条腿的OAuth?
我可以把我的前端看作是一个特殊的第三方应用程序,它有能力创建用户帐户吗?
我可以在前端使用什么安全协议?
发布于 2012-04-22 15:34:20
因为您声明REST只能由经过身份验证的客户端访问,所以首先需要一种会话形式来记住客户端的身份验证状态。根据您是否可以更改REST的服务器代码,您可以在API提供服务器本身上实现这一点。
这可以使用任何众所周知的用户身份验证方法,比如用户名/密码组合,或者使用(自签名)证书。
但是,与HTTP一样,您必须确保密码不会以明文形式通行,一旦会话通过了身份验证,连接就不应该泄漏会话标识符,从而允许它被劫持。这基本上意味着您必须模仿类似SSL的行为,或者为您的前端实现SSL支持。这里可以找到一个例子:http://assl.sullof.com/assl/
您有关OAuth的问题是另一个问题,我建议您在一个单独的问题中问这个问题,如果它仍然是您想知道的。
对于代理层,这是一个可行的选择,前提是除了通过这样的代理之外,API不能公开访问。这个代理层必须实现相同的类似SSL的属性,但是这个设置使您能够保持身份验证逻辑和API提供程序之间的分离。但是,如果您能够更改API,我将不推荐它,因为如果服务器的任何部分意外地提供了对私有API的访问,您就可以绕过身份验证要求。
https://security.stackexchange.com/questions/9863
复制相似问题