开放平台有两种认证方式,一种是 Basic Auth,一种是 OAuth
Basic Auth(HTTP Auth)
Basic Auth 简单点说明就是每次请求 API 时都提供用户的 username 和 password。【base64encode(username+”:”+password)】,这种方式优点和缺点都很明显。
- 优点:
- 使用非常简单,
- 开发和调试工作简单,
- 没有复杂的页面跳转逻辑和交互过程;
- 更利于发起方控制;
- 缺点:
- 安全性低,每次都需要传递用户名和密码,用户名和密码很大程度上存在被监听盗取的可能;
- 同时应用本地还需要保存用户名和密码,在应用本身的安全性来说,也存在很大问题;
- 开放平台服务商出于自身安全性的考虑(第三方可以得到该服务商用户的账号密码,对于服务商来说是一种安全隐患),未来也会限制此认证方式(Twitter 就计划在 6 月份停止 Basic Auth 的支持)
- 用户如果更改了用户名和密码,还需要重新进行密码校验的过程。
OAuth(Open Authorization)
OAuth 为用户资源的授权提供了一个安全、开放的标准,将会是以后开发平台普遍遵守的,目前 Twitter、Sina 微博、豆瓣、Google 等都提供对它的支持。
- 交互过程
- 1)应用用 APP KEY 和 APP SECRET 换取 OAuth_token;
- 2)应用将用户引导到服务商的页面对该 OAuth_token 进行授权(可能需要输入用户名和密码);
- 3)服务商的页面跳转回应用,应用再根据参数去服务商获得 Access Token;
- 4)使用这个 Access Token 就可以访问 API 了。
- OAuth 认证的四种模式
- 授权码模式 是功能最完整、流程最严密的授权模式,code 保证了 token 的安全性,即使 code 被拦截,由于没有 app_secret,也是无法通过 code 获得 token 的
- 隐式授权模式/简化模式 和授权码模式类似,只不过少了获取 code 的步骤,是直接获取令牌 token 的,适用于公开的浏览器单页应用,令牌直接从授权服务器返回,不支持刷新令牌,且没有 code 安全保证,令牌容易因为被拦截窃听而泄露
- 密码模式 使用用户名/密码作为授权方式从授权服务器上获取令牌,一般不支持刷新令牌
- 客户端凭证模式 一般用于资源服务器是应用的一个后端模块,客户端向认证服务器验证身份来获取令牌
- OAuth 的优点:
- 安全性高,用户的账户和密码只需要提供一次,而且是在服务商的页面上提供,防止了 Basic Auth 反复传输密码带来的安全隐患;
- Access Token 访问权限仅限于应用,被窃取不会影响用户在该服务商的其他服务;
- Access Token 即使被监听丢失了随时可以撤销,不像密码丢失可能就被别人篡改了;
- 用户修改了密码也不会影响该应用的正常使用。
OAuth 和 Basic Auth 两种方式的区别, OAuth 是一种比较通用的,安全的认证方式,不需要用户名密码,只需要用户授权;basic auth 是一种基于用户名密码的认证,每次访问都需带上用户的用户名密码。
参考链接: