在前面《互联网并发与安全专题》中,有讲到过OAuth协议。
- 《互联网并发与安全系列教程(09) -基于AccessToken方式实现API设计》
- 《互联网并发与安全系列教程(11) -OAuth2.0协议实现API设计》
开放平台接口一般应用于以下场景:
- 比如腾讯的QQ互联网、微信开放平台、蚂蚁金服开放平台 、微博开放平台,比如实现功能QQ联合登陆、微信扫码登陆。
- 还有就是在大型集团公司中,分为总公司,和旗下多个分公司,总公司与分公司相互通讯也可以采用开放平台形式对接口进行授权。
「OAuth」: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。
下面拿QQ登录OAuth2.0来举例:
- 对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。
- QQ登录OAuth2.0采用OAuth2.0标准协议来进行用户身份验证和获取用户授权,相对于之前的OAuth1.0协议,其认证流程更简单和安全。
OAuth认证和授权的过程如下:
- 用户访问第三方网站网站,想对用户存放在服务商的某些资源进行操作。
- 第三方网站向服务商请求一个临时令牌。
- 服务商验证第三方网站的身份后,授予一个临时令牌。
- 第三方网站获得临时令牌后,将用户导向至服务商的授权页面请求用户授权,然后这个过程中将临时令牌和第三方网站的返回地址发送给服务商。
- 用户在服务商的授权页面上输入自己的用户名和密码,授权第三方网站访问所相应的资源。
- 授权成功后,服务商将用户导向第三方网站的返回地址。
- 第三方网站根据临时令牌从服务商那里获取访问令牌。
- 服务商根据令牌和用户的授权情况授予第三方网站访问令牌。
- 第三方网站使用获取到的访问令牌访问存放在服务商的对应的用户资源。
比如“网易云音乐”使用第三方(QQ)注册登录:
1、生成授权CODE链接,获取授权码(要现在QQ开放平台注册) ----用户点击(举例)
https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101462456&state=888&redirect_uri=http://www.wangyi.com/qqLoginBack 2、使用用户获取的授权码,获取对应的accessToken(举例) https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=101462456&client_secret=4488033be77331e7cdcaed8ceadc10d5&code=E91DF5B0E2455A6B2AF25CD9FA1C7582&redirect_uri=http://www.wangyi.com/qqLoginBack 3、使用accessToken获取用户openid(举例) https://graph.qq.com/oauth2.0/me?access_token=B2FD1997D149313F16C93D91C75AC75E 4、使用openid获取用户信息(举例) https://graph.qq.com/user/get_user_info?access_token=B2FD1997D149313F16C93D91C75AC75E&oauth_consumer_key=101462456&openid=4B1717CBBFE1E900D2A1482C4A18B3BD