Stack Overflow 经常出现的话题

已经被解决的问题,但是需要大量必要的知识和充足的理解才能很好地实现

传统 API 认证

HTTP Basic Authentication

工作方式

  1. client 开发者获取到API key(一般是 ID 和 Secret)

3bb743bbd45d4eb8ae31e16b9f83c9ba:ffb7d6369eb84580ad2e52ca3fc06c9d

开发者有责任将 API key 存放在一个安全的地方,没有人可以得到它

开发者发起 API 请求时,把 API key 放到HTTP Authorization header中,同时带有关键词Basic(用户名和密码都使用 base64 加密)

curl –user 3bb743bbd45d4eb8ae31e16b9f83c9ba:ffb7d6369eb84580ad2e52ca3fc06c9d https://api.example.com/v1/test

  1. server

从HTTP Authorization hearder中获取字符串,base64 解密,获得 ID 和 Secret,验证通过后再处理

但移动 app 无法安全存储 API 秘钥,Basic Authentication 要求每次请求时使用原始的 API keys,导致了 key 长期使用,不安全

无法安全将 API keys 嵌入到分配给许多用户的移动 app 中,可被逆向工程,获取keys,滥用API

OAuth2.0

工作方式。

用户打开移动 app,输入账号和密码。 移动 app 发送一个带有用户的用户名和密码的 POST 请求到 API 服务器,服务器进行验证,成功后返回一个 code。 移动 app 通过 code 向认证服务器发送请求,认证成功后为用户生成一个一段时间后就会过期的 access token。 将 access token 存储在移动设备本地,就像一个能够访问 API 服务的 API key 一样。 一旦 access token 过期就不再工作,需要再提示用户输入用户名密码,重复 1 的步骤。 之所以说 OAuth2 在保障 APIs 安全上是极好的,是因为我们不需要在一个不安全的环境中长期存储 API keys,取而代之的是生成一个临时的 access tokens。这可以抵御一些潜在的攻击。

现在,当您的 API 服务生成您的移动应用程序需要的 Oauth2 token 时,您当然需要将其存储在您的移动应用程序中。

豆瓣 oauth2值得参考 https://developers.douban.com/wiki/?title=oauth2