Authentication REST身份验证/授权

Authentication REST身份验证/授权,authentication,rest,authorization,Authentication,Rest,Authorization,我需要一些关于如何保护我的应用程序的建议: 我有一个REST服务,使用SpringMVC3 我有我的客户端应用程序,使用extgwt2.2 用户凭据仅在服务器端可用 SSL可用 REST服务只能由经过身份验证的用户使用 我已经阅读了HTTP摘要、基于令牌的授权、oAuth等,但我需要一些关于如何保护我的应用程序的说明和建议,以及在我的情况下哪些方法是最好的。以下是我们为我们的应用程序创建的方法,非常有效,非常安全 这是一个非常概念化的解释,有很多代码支持这一点,仅供参考 当用户验证或创建帐户时

我需要一些关于如何保护我的应用程序的建议:

我有一个REST服务,使用SpringMVC3

我有我的客户端应用程序,使用extgwt2.2

用户凭据仅在服务器端可用

SSL可用

REST服务只能由经过身份验证的用户使用


我已经阅读了HTTP摘要、基于令牌的授权、oAuth等,但我需要一些关于如何保护我的应用程序的说明和建议,以及在我的情况下哪些方法是最好的。

以下是我们为我们的应用程序创建的方法,非常有效,非常安全

这是一个非常概念化的解释,有很多代码支持这一点,仅供参考

  • 当用户验证或创建帐户时,服务器返回一个x.509证书,base64编码,该证书对于用户是唯一的。服务器存储一个副本

  • 每次客户端需要访问RESTAPI时,客户端都会创建一个JSON字符串,该字符串由以下内容组成

  • 用户的唯一ID(UserID)

  • 保证此调用唯一的GUID或UUID(CallID)(防止重播攻击)
  • rest调用的每个参数的字典(键/值的集合)
然后,我们使用x.509公钥加密该字符串,并将其编码回base64字符串,然后获取该加密值并将用户ID添加到我们称为令牌的json对象中

然后,我们将令牌放入每个调用的头中,并将其称为:X-Auth-UserToken

每次调用时,服务器都会获取令牌,根据用户ID查找用户证书,然后验证令牌的加密部分是否可以使用服务器为用户持有的私钥进行解密

解密后,服务器将获取CallID,并根据自己的calllog db验证它是否唯一

如果它签出,则对用户进行身份验证

一旦用户通过身份验证,就可以根据用户的唯一ID应用自己的授权规则

当然,所有这些都是通过SSL实现的


如果您需要我深入了解任何零件,请告诉我。

太棒了!我一直在寻找这个。你可能想看看WebID,它是一种标准化的方式,可以完成你所描述的工作。当用户进行身份验证时,服务器通过ssl发送回临时令牌时,会话是否足够安全?如果连接已经通过ssl进行了安全保护,那么额外的证书有什么好处?您是正确的。它是多余的,可以认为是多余的。但它真的很安全。:-)所以您存储每个GUID/UUID并检查它以前是否未被使用过?你储存多长时间?它们有多大?您如何生成它们?