我们打算开发基于休息的api。我探讨了这个主题,但看起来,当你的客户端是一个应用程序时,你可以保护api(所以有很多方法,公钥 - 私钥等)。那么网站/移动网站呢,如果我们访问网站中没有使用任何登录访问内容的基于休息的api(登录是可选的)那么我们怎样才能限制其他人访问基于休息的api?
使用Oauth2.0有意义吗?我对此并不清楚。
更明确的问题可能是,我们如何确保在不使用任何登录的网站上通过网络公开获取或发布请求?
如果它是简单的获取请求或发布请求,它将返回特定输入的json数据,现在我有移动网站,谁将使用get请求或发布请求来获取数据。好吧,其他一些人也可以访问它,问题是我没有使用Login,用户可以直接访问数据。但是,我们如何限制其他人访问这些数据。
答案 0 :(得分:3)
您认为保护不使用REST的网站与使用REST API的网站之间的区别是什么?
OAuth为您的站点提供授权功能,在REST架构中,这意味着移动应用程序的用户必须在允许访问资源之前提供其凭据。然后,应用程序可以决定该用户是否可以访问所请求的资源。但是你说你的网站不需要使用授权。
您可以使用证书,但要为每个客户管理证书。我的看法是为了您的解释,您不需要保护您的网站,因为您永远无法管理客户端和服务器之间的信任关系。但有一些选择:
可能有其他人,但你得到了基本的想法。在我看来,如果您的资源不需要授权,那么您不需要保护该REST API。我可以问您通过此REST API或您提供的功能公开了哪种数据?这可能有助于提供更好的答案。
答案 1 :(得分:1)
您需要授权:只允许某些代理(移动客户端)和/或用户访问这些API。
要解决这个问题,您需要识别:服务器告诉谁是谁(或什么)的方式,这样才能做出正确的决定。
根据您对安全的关注程度,有许多不同的方式可以提供某种形式的识别。
最简单的是用户代理字符串,特定于您的移动客户端。但它很容易伪造。稍微更难伪造的是基于客户端的“秘密” - 在您的移动客户端代码中嵌入某种秘密或密钥。你可以把它变得非常复杂和秘密,但正如ramsinb指出的那样,你不能以这种方式获得安全性,因为它需要你能够保证你随客户端发送的秘密(它的代码,算法或任何其他花哨的构造都不能被妥协或逆向工程。当您不控制客户端时不会发生。
从那里,有3个选择: