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

基于 Oauth 2.0 的第三方账号登录实现
Oauth 2.0 原理与授权流程

1.刚开始的第三方应用接入其他账号登录过程: 


存在问题:

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

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

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流程

引导用户到如下地址进行授权: 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
 

转载于:https://my.oschina.net/llsydn/blog/3013847

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值