REST API考虑因素,以便将来进行扩展

时间:2014-11-30 18:32:51

标签: java api rest expansion

首先,一个小小的免责声明:这是我第一次尝试构建REST API,所以请关注我这个:)

我正在为一个Angular应用程序设计一个Java API,我遇到了一个我真不知道如何处理的情况。 首先,API只会为一个Angular应用程序提供服务,它基本上可以让用户编辑他们的属性,同时创建链接到各自用户的各种资源。

我遇到问题的概念是允许其他应用程序在将来访问API。你会如何设计它以实现这种扩展?

我的想法是每个API调用都会在HTTP标头中携带一个特定于应用程序的标记,该标记唯一地标识该应用程序。这将要求开发人员事先注册并接收令牌,以便在他的电话中使用。这种方法的问题在于我不知道它到底有多安全。你认为这是一个很好的起点,还是我错过了一些重要的东西?

1 个答案:

答案 0 :(得分:0)

你几乎做对了。您的方法的问题是欺骗应用程序ID非常容易,特别是当它没有过期时。通常的方式,每个访问您服务的应用都会有Application KeyApplication Secret。您使用app key标识应用程序,secret使用服务进行身份验证并获取访问令牌,或者在每个请求中包含一个签名,该签名将使用app secret作为密钥进行加密。 所以这是建议的工作流程:

  • 客户端应用程序使用app ke y和app secret
  • 对服务进行身份验证
  • 服务返回access token - 用于标识工作会话的内容
  • 客户端应用程序将包括access token每个服务请求,从而建立客户端身份
  • Access token应该过期
  • 该服务应仅通过TLS工作,因为应用程序密钥在身份验证调用期间以明文形式发送。

这受到OAuth2执行操作的启发,减去了客户端应用可能希望访问您服务上的用户的想法(就像您可以使用第三方应用访问Facebook上的用户数据一样)。如果你有一个用户概念,你可能想要使用OAuth2,这是一个很好的教程:http://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified 您还可能希望了解其他人如何保护其REST服务。这是AWS,为exapmle: http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html 希望有所帮助。