请记住,OAuth 不是关于防止假冒,而是更多关于保护凭据。第三方为您验证了用户的身份,而不会暴露用户的凭据。由于令牌不是凭证,因此黑客可以造成的伤害量和他的行动窗口是有限的。
但是 OAuth 对您的应用程序而言并不比常规用户名/密码身份验证更安全。在客户端应用程序上,您的所有代码都可供全世界查看!作为
你提到,客户端加密是一个值得怀疑的策略。
虽然没有既定的保护客户互动的最佳做法,但这里有一些方法可以最大限度地减少您的风险:
1) SSL:灵丹妙药?可能是。您在自己的网站和请求中使用 SSL 的次数越多,用户的请求就越安全。老实说,我相信所有特权请求都应该由加密请求发出。
2) 令牌寿命短:令牌的寿命越短,嗅探它的激励/优势就越小。
OAuth 2.0 通过将身份验证令牌换成刷新令牌换成身份验证令牌来在身份验证之外创建一个持续的喋喋不休。作为开发人员,您现在正在开发一个聊天应用程序,该应用程序执行很多“你的令牌是什么,这是另一个令牌,向我要一个令牌,这是你的新令牌......所以你想要什么?” ...“哎呀,时间到了,你的刷新令牌呢?”
如果这听起来很痛苦,那确实是。 OAuth 2.0 旨在使开发人员的流程更轻松。但重要的一点是,代币的寿命越短,黑客就越难维护欺诈身份。
Refresh Token reference
3) 加强你的领域: 想要减少嗅探者滥用你盔甲缝隙的机会吗?不允许跨域请求!
当然,我们经常有分布式环境。但是,如果您的 Facade 位于客户的域中,那么您的曝光率就会降低(单词选择有问题)。
强迫黑客使用你的域名,限制他们的创造力。
4) 尽可能频繁地使用 3rd 方 API 来维护您的访问权限: Google 和 Facebook API 和服务已经过单元测试、实战测试和演进。您越能依靠他们来维护您的用户身份,您所做的工作就越少,获得的机会就越少。
5) 检查 IP 地址: 几乎任何东西都可以伪造,但黑客必须知道 IP 地址是您验证的一部分。这是所有做法中最不可靠的做法,但结合 1,2 或更多,黑客可利用的差距越来越小,努力的回报也逐渐消失。
6) 使用“秘密”或第二个参数:您可以传递给用户的不仅仅是令牌。您可以传递自己的 Alter-Token。
假设它是一个来回传递的 ID 数据。以不明显的方式命名参数。将其设为数字(例如年龄、身高、地址)。重要的一点是,您的黑客对对方要求的内容知之甚少或一无所知!
您可以通过设置 3 个作为安全性的参数来解决问题。
7) 不要提供错误消息来通知黑客他们已被抓获。给出超时消息而不是“知道了!”如果入侵者没有意识到欺诈行为被抓住了,他们也不会适应。
我不能说太多——SSL 省去了很多麻烦。
注意:我见过的所有客户端提供商都允许访问他们的 API 而不会暴露 Secret。 绝不能将秘密暴露给客户端。
- 客户端上暴露的任何数据都可以闪烁
- 您使用的任何加密算法都将在客户端上公开。