基于 Oauth 2.0 的第三方账号登录实现

基于 Oauth 2.0 的第三方账号登录实现

Oauth 2.0 原理与授权流程

  • 1.刚开始的第三方应用接入其他账号登录过程: 基于 Oauth 2.0 的第三方账号登录实现_第1张图片

存在问题:

  • 1.用户账号、密码信息透露给了第三方应用,导致安全问题
  • 2.用户要回收授权,只能通过修改密码来实现,此时如果有多个第三方应该,所有授权一起被回收
  • 3.很难安全的实现对不同的第三方应用给予不用的权限
  • 2.使用oauth改进的原理: 基于 Oauth 2.0 的第三方账号登录实现_第2张图片

  • 3.使用oauth实现的具体流程: 基于 Oauth 2.0 的第三方账号登录实现_第3张图片

3个关键过程:

  • 1.用户在服务商授权页完成授权,获得code
  • 2.第三方应用取得code后访问服务商应用,获得access_token
  • 3.第三方应用以access_token为凭证到服务商获取资源

百度平台授权流程及接口调用

  • 1.流程

    • 注册一个平台账号
    • 申请成为开发者
    • 创建网站接入类型应用(获得apiKey,secretKey等信息)
    • 设置回调URL(获得回调地址redirect uri信息)
    • 开发、测试
  • 注册一个平台账号:

    • 注册地址:https://developer.baidu.com/
    • 登录后,注册成为开发者:http://developer.baidu.com/user/reg
    • 注册成功后,查看开发者信息:http://developer.baidu.com/user/info
    • 创建应用:可以得到apiKey和secretKey等信息
    • 设置回调的url:在“安全设置”里面设置,填写“授权回调页”例如:http://localhost:8080/third_login/baidu
    • 查看oauth2.0:“授权应用场景”:http://developer.baidu.com/wiki/index.php?title=docs/oauth/application

Server端使用百度OAuth2.0授权调用开放API流程

  1. 引导用户到如下地址进行授权: http://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REGISTERED_REDIRECT_URI

  2. 如果用户同意授权,页面跳转至 YOUR_REGISTERED_REDIRECT_URI/?code=CODE 。

  3. 换取Access Token。 https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=CODE&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&redirect_uri=YOUR_REGISTERED_REDIRECT_URI

code: 是授权成功后跳转到redirect_uri后面带的code
client_id: 是apiKey
client_secret:是secretKey
redirect_uri:是回调的url

测试用例

  • 去到百度账号授权页 http://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=AXg9Q2CuGLrHbGa2k7pQEehz&redirect_uri=http://localhost:8080/third_login/baidu

  • 登录账号,点击授权,发生回调(得到code) http://localhost:8080/third_login/baidu?code=d809260c20846af155b5cb2eb9973ea4

  • 换取access_token(注意:这里的链接不要出现空格,否则访问报错) https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=d809260c20846af155b5cb2eb9973ea4&client_id=AXg9Q2CuGLrHbGa2k7pQEehz&client_secret=BymTr6GcxTNPexGZsrCmZ5MoHRU5heoE&redirect_uri=http://localhost:8080/third_login/baidu

返回结果:
{
"expires_in": 2592000,
"refresh_token": "22.3fcc01b887492aa1776c64d22c5a4848.315360000.1865835419.2956862442-15580017",
"access_token": "21.90c30aff2eff3cffa42b49c152e9feae.2592000.1553067419.2956862442-15580017",
"session_secret": "b4a40269b5b1e7951d704bf5ff917d9e",
"session_key": "9mnRfQpMu/CXDG0NYlKZmj5DgbjYnUZHeePW5Z7chFc+/PFjB7Cv3MiS12m7iz8AP4SrYgz2HhwWNeC9/yFmy51Xu7sLiW9qZLg=",
"scope": "basic"
}
  • 获取当前登录用户的简单信息 https://openapi.baidu.com/rest/2.0/passport/users/getLoggedInUser?access_token=21.90c30aff2eff3cffa42b49c152e9feae.2592000.1553067419.2956862442-15580017
返回结果:
{
"uid": "2956862442",  (这个可以保存到数据库中做逻辑登录)
"uname": "幸运的深仔",
"portrait": "6db0e5b9b8e8bf90e79a84e6b7b1e4bb94353a"
}
  • 获取大小图像 (根据portrait获取)http://tb.himg.baidu.com/sys/portraitn/item/${portrait}
  • small image: http://tb.himg.baidu.com/sys/portraitn/item/6db0e5b9b8e8bf90e79a84e6b7b1e4bb94353a
  • large image: http://tb.himg.baidu.com/sys/portrait/item/6db0e5b9b8e8bf90e79a84e6b7b1e4bb94353a

你可能感兴趣的:(基于 Oauth 2.0 的第三方账号登录实现)