首先,一个小小的免责声明:这是我第一次尝试构建REST API,所以请关注我这个:)
我正在为一个Angular应用程序设计一个Java API,我遇到了一个我真不知道如何处理的情况。 首先,API只会为一个Angular应用程序提供服务,它基本上可以让用户编辑他们的属性,同时创建链接到各自用户的各种资源。
我遇到问题的概念是允许其他应用程序在将来访问API。你会如何设计它以实现这种扩展?
我的想法是每个API调用都会在HTTP标头中携带一个特定于应用程序的标记,该标记唯一地标识该应用程序。这将要求开发人员事先注册并接收令牌,以便在他的电话中使用。这种方法的问题在于我不知道它到底有多安全。你认为这是一个很好的起点,还是我错过了一些重要的东西?
答案 0 :(得分:0)
你几乎做对了。您的方法的问题是欺骗应用程序ID非常容易,特别是当它没有过期时。通常的方式,每个访问您服务的应用都会有Application Key
和Application Secret
。您使用app key
标识应用程序,secret
使用服务进行身份验证并获取访问令牌,或者在每个请求中包含一个签名,该签名将使用app secret作为密钥进行加密。
所以这是建议的工作流程:
app ke
y和app secret
access token
- 用于标识工作会话的内容access token
每个服务请求,从而建立客户端身份Access token
应该过期这受到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 希望有所帮助。