基于 Oauth 2.0 的第三方帐号登陆实现

基于 Oauth 2.0 的第三方帐号登陆实现
Oauth 2.0 原理与受权流程php

1.刚开始的第三方应用接入其余帐号登陆过程: 数据库


存在问题:api

1.用户帐号、密码信息透露给了第三方应用,致使安全问题
2.用户要回收受权,只能经过修改密码来实现,此时若是有多个第三方应该,全部受权一块儿被回收
3.很难安全的实现对不一样的第三方应用给予不用的权限
2.使用oauth改进的原理: 安全

3.使用oauth实现的具体流程: session

3个关键过程:app

1.用户在服务商受权页完成受权,得到code
2.第三方应用取得code后访问服务商应用,得到access_token
3.第三方应用以access_token为凭证到服务商获取资源
百度平台受权流程及接口调用测试

1.流程网站

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

注册地址: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流程url

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

若是用户赞成受权,页面跳转至 YOUR_REGISTERED_REDIRECT_URI/?code=CODE 。

换取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  

相关文章
相关标签/搜索