无需令牌即可保护 API 调用
Posted
技术标签:
【中文标题】无需令牌即可保护 API 调用【英文标题】:Securing API calls without token 【发布时间】:2018-12-02 10:24:17 【问题描述】:我正在使用 php 构建一个应用程序和一个 API 端点(我知道你在想什么!)。我的问题是,如果我在第一次打开应用程序时向用户询问用户名和密码,因为我无法在本地存储这些详细信息,因为它们可能会被泄露。我会通过 Post 请求将这些发送到服务器,然后根据用户是否正确生成令牌。得到响应后,我必须在本地存储这个令牌吗? 是的!。令牌已过期。令牌过期后,我不想向用户询问他们的姓名和密码,但想访问仍然以该用户身份进行身份验证的 API。我将如何做到这一点?
如果我使用 Oauth,它仍然是相同的程序,对吗?我应该在本地存储一些东西。这不会被妥协吗?我很困惑。
其他应用程序如何工作。我敢肯定他们在后台做某事。他们只要求我们提供一次凭据,并且所有后续 API 调用都将受到保护。在那种情况下令牌不会过期还是什么?
我可以在不在本地存储任何内容的情况下保护 API 调用吗?我不希望从应用程序以外的任何地方访问 API。
【问题讨论】:
【参考方案1】:使用 android SharedPreferences。它应该是非常安全的,除非你故意暴露它,例如它可以通过在清单中缺少 (android:exported="false") 的导出内容提供程序访问。您也可以使用 sqlite,但对于一两行数据使用 db 表是没有意义的。您还可以加密用户名和密码,以增加一个安全层来保护 root 用户。 此外,为了保护网络中的数据,您应该在后端使用 ssl,这样没有人可以嗅探凭据。
【讨论】:
SSL 非常安全,除非使用中间人攻击。加密需要将密钥存储在某个地方,因此没有什么是真正安全的。我想关键是让它变得更加困难,但找到完美的解决方案就像连续中了 5 次彩票一样。从本质上讲,Oauth 非常安全,只是不是防弹的。以上是关于无需令牌即可保护 API 调用的主要内容,如果未能解决你的问题,请参考以下文章
无需对移动应用进行用户身份验证即可保护私有 REST API 的最佳方法