no17-OAuth2学习

飞一样的编程
飞一样的编程
擅长邻域:Java,MySQL,Linux,nginx,springboot,mongodb,微信小程序,vue

分类: springboot 专栏: springboot学习 标签: oauth2

2023-04-14 23:29:35 466浏览

oauth2

概念

OAuth2.0是一个开放标准,允许用户授权第三方应用程序访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。也就是开放系统之间的授权

OAuth2.0协议的认证流程,简单理解,就是允许我们将之前的授权和认证过程交给一个独立的第三方进行担保。

是一个应用之间彼此访问数据的开源框架,通俗地讲,它是用来授权第三方应用程序的,通过提供OAuth2.0协议的API使得第三方应用程序能够使用自己应用程序中的用户进行登录和授权,这样用户就能够直接利用自己的应用程序账号来登录和使用第三方程序了。

背景

照片拥有者想要在云冲印服务上打印照片,云冲印服务需要访问云存储服务上的资源

资源拥有者:照片拥有者

客户应用:云冲印

受保护的资源:照片

角色定义

  • 资源拥有者:拥有共享数据的人或应用,比如qq或者微信的用户
  • 资源服务器:托管资源的服务器
  • 客户端应用:请求访问存储在资源服务器上的资源的应用,也可以称为第三方客户端应用。
  • 授权服务器:授权客户端应用能够访问资源拥有者所拥有的资源。授权服务器和资源服务器可以是同一个服务器,也可以是不同的服务器

咱们以杰凡itqq第三方登录为例:

资源拥有者:张三的qq

资源服务器:腾讯服务器 (放你qq这种资源的)

客户端应用:杰凡it网站

授权服务器:腾讯那边给我们专门发授权码的服务器(反正也是腾讯那边的)

解决的问题

比如我的网站很不知名,客户信不过我的网站,不想注册自己的个人信息(密码等),这个时候提供几个知名的第三方登录方式,可以大大增强注册率。免注册的方式一是提高了用户的操作效率,二是增加了安全性。

四种授权方式

授权码方式

qq第三方登录

操作步骤

1、在百度搜索qq互联关键字

2、创建应用

3、注意该最重要的就是回调地址(这个涉及到当用户选择第三方登陆成功后做什么处理,比如保存qq号到数据库,生成一条用户记录、将qq头像保存到服务器等,还有就是跳转到哪个页面,这些都需要处理)

4、最后做出来的效果

请求的地址:https://graph.qq.com/oauth2.0/show?which=Login&display=pc&client_id=101413823&redirect_uri=https://www.jf3q.com/afterQqLogin.do&response_type=code&state=7f9c636b961cc4181bda8a275236261e&scope=get_user_info,add_topic,add_one_blog,add_album,upload_pic,list_album,add_share,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idollist,add_idol,del_ido,get_tenpay_addr

以qq第三方登录(免注册)为例——第一次登录相当于获取qq的账号信息生成一个账号保存到杰凡it的数据库的用户表,以后再登录的时候就只是登录了无需生成用户信息插入用户表了:

qq互联校验了回调地址

接着就跳到我杰凡it的网站了,并且是登录状态 了

源码简单分析下:

简化模式

在授权码的基础上做了一个简化,就是后台拿到授权码再请求授权服务器拿token这一步省略了,二是直接回调地址的时候就把token带了回去。

密码式

就是用户直接提供密码给客户端,然后客户端拿着密码直接去请求授权服务器申请token,然后拿着token去请求资源服务器

客户端模式

不需要用户参与,这个就有点类似要查看第三方应用里多个用户的信息,那第三方如果跟客户端应用合作了就可以。

自定义基于oauth2.0的开放接口

1.测试需要启动redis,

2.直接get访问localhost:8080/public/1  localhost:8080/private/1

3.使用http工具post访问password模式http://localhost:8080/oauth/token?username=user_1&password=123456&grant_type=password&scope=select&client_id=client_2&client_secret=123456

使用http工具post访问client模式http://localhost:8080/oauth/token?grant_type=client_credentials&scope=select&client_id=client_1&client_secret=123456

4.再次带上获取的tokenget访问http://localhost:8080/private/1?access_token=bd77315b-5f83-433f-a4aa-b9f20b89ff34

http://localhost:8080/private/1?access_token=d6912dd2-347d-4e64-98a3-922380dab7a0

好博客就要一起分享哦!分享海报

此处可发布评论

评论(1展开评论

蓝色妖姬 能力:10

2023-04-18 10:49:38

学习中
点击查看更多评论

展开评论

客服QQ 1913284695