你管这破玩意叫 OAuth?

SpringSecurity OAuth2 关于 UserAuthenticationConverter 前言 之前写了一大堆关于SpringSecurity OAuth2的相关文章,本以为可以告一段落了,但是有了解到一个新东西,之前没注意到的,就是UserAuthenticationConverter,本章就来看看这是个啥玩意!我们知道授权服可以提供两种格式的Token,一种是默认的字符串,另一种是JWT格式的字符串,关于JWT格式Token我这里就不多逼逼是什么意思勒,我们认证服采用JWT格式主要就是为了提高Token校验的性能,如果我们采用默认的字符串的话默认需要调用认证服进行token检查,就是通过Ht 阅读详情

低并发编程

战略上藐视技术,战术上重视技术

今天,我想登陆豆瓣,看看电影评论,陶冶陶冶情操。

但是,我从来没注册过豆瓣账号,而我又懒得再注册一个,怎么办呢?

我打开豆瓣的官网,笑了,原来豆瓣早就为我这种懒人想到了办法。

懒人三步

第一步:在豆瓣官网点击用 QQ 登陆。

第二步:跳转到 qq 登录页面输入用户名密码,然后点授权并登录。

第三步:跳回到豆瓣页面,成功登录。

太方便了!

但这短短的几秒钟,可不简单,我来给你说说。

上帝视角看发生了什么

这几秒钟之内发生的事情,在外行的用户视角看来,就是在豆瓣官网上输了个 qq 号和密码就登录成功了。

在一些细心的用户视角看来,页面经历了从豆瓣到 qq,再从 qq 到豆瓣的两次页面跳转。

但作为一群专业的程序员,我们还应该从上帝视角来看这个过程。

看起来很复杂是吧,我们一步步拆解一下:

第一步:在豆瓣官网点击用 qq 登录

当你点击用 qq 登录的小图标时,实际上是向豆瓣的服务器发起了一个请求。

http:// www.douban.com/leadToAuthorize

豆瓣服务器会响应一个重定向地址,指向 qq 授权登录的页面地址。

http:// www.qq.com/authorize

当然,这个重定向地址还附带了一个回调地址,这是在 QQ 那边登陆成功后需要跳回的豆瓣地址。

http://www.qq.com/authorize?
callback=www.douban.com/callback

这跳回的地址是必然的嘛,不然 QQ 怎么知道在我这边登陆成功后我要干嘛,上杆子找人家 QQ 授权的网站那么多。

这部分的流程是黄色的这部分。

第二步:跳转到 qq 登录页面输入用户名密码,然后点授权并登录

上一步,浏览器接到重定向地址

http://www.qq.com/authorize?
callback=www.douban.com/callback

自然没什么好说的,乖乖访问过去。

这回访问的就是 QQ 的页面了。

用户输入 QQ 号和密码,点击授权并登陆,这里走 QQ 服务器自己的校验逻辑,与豆瓣毫无关系。

若校验成功,会响应给浏览器一个重定向地址

www.douban.com/callback

没错,就是上一步传给 QQ 服务器的 callback 参数!

但除了这个地址外,还附上了一个 code,我们叫它授权码。

www.douban.com/callback?code=xxx

这个 code 是豆瓣服务唯一关心的事情,至于你那边如何校验用户,无所谓,只要最终能给我一个 code 码,我就认为这个用户在你那里登陆成功了。

这部分的流程是黄色的这部分。

第三步:跳回到豆瓣页面,成功登录

这一步背后的过程其实是最繁琐的,但对于用户来说是完全感知不到的。

用户在 QQ 登录页面点击授权登陆后,就直接跳转到豆瓣首页了,但其实经历了很多隐藏的过程。

首先接上一步,QQ 服务器在判断登录成功后,使页面重定向到之前豆瓣发来的 callback 并附上 code 授权码。

www.douban.com/callback?code=xxx

浏览器接到重定向,乖乖发起请求,此时请求的是豆瓣服务器。

豆瓣服务器收到请求后,对 QQ 服务器发起了两次请求:

1. 用拿到的 code 去换 token

2. 再用拿到的 token 换取用户信息

这个 code 和 token 都是有失效时间的,也因此保证了只要不在短时间内泄漏出去,就不会有安全风险。

拿到用户信息之后,就返回给了浏览器。注意此时的浏览器上是豆瓣的首页,豆瓣也因此可以将你的个人信息展示出来。

这部分的流程是黄色的这部分。

至此,整个过程结束。

这个破玩意,就叫做 OAuth 2.0 协议。

这个流程目的是让大家从全局了解 oauth2.0 协议实际上发生了什么,并仅仅以 oauth 的其中一种模式,授权码模式进行讲解。

如想了解更多模式,以及每次的请求和响应的标准齐全的参数,推荐读一下阮一峰的文章。

http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

为啥要这么跳来跳去

为什么,要这么麻烦呢?跳来跳去的。

其实之所以有这个协议,我总结起来有两点原因:

懒 + 不信任

懒是指用户懒。

如果用户不那么懒,直接在豆瓣上新注册一个账号就好了。

不信任是什么意思呢?

如果用户信任豆瓣网站,那完全可以让用户在豆瓣网站输入 QQ 的用户名和密码,由豆瓣传给 QQ 服务器做校验,并返回用户信息。

但这是不可能的,你愿意把你的 QQ 号和密码给豆瓣看到?

更甚者,如果 QQ 信任豆瓣,用户也信任豆瓣,那 QQ 也可以把自己的数据库直接拷贝给豆瓣,然后豆瓣就可以完全自己拥有一套 QQ 用户数据了,也就可以让用户使用 QQ 登录。

当然,这也是不可能的。

所以就有了 OAuth 这种协议,你进行第三方授权时(文中的QQ),用户名和密码是不经过目标服务器的(文中的豆瓣),这保证了授权的安全性。

第三方授权服务器只给目标服务器返回有时效性的 code 和 token,目标服务器通过这个去第三方资源服务器,换取用户信息,这达成了拿到用户信息的目的。

所以总的来说,oauth 协议,就是由于三者(用户、目标、第三方)相互不信任,又想使用第三方服务器的授权功能,以及获取第三方服务器存储的用户信息,而产生的一个办法。

这个破玩意,就叫做 OAuth 2.0 协议。

哦,上面好像说过了。

礼物

了解了上述过程后,代码自然就不难写了。

这里我实现了一个极简版的 oauth2.0 用于体验这个过程,大家可以参考下。

项目结构非常简单,只有两个模块,分别是豆瓣和QQ,分别启动即可。

最终效果也非常简单清晰,下面请忍受 low 逼的显示效果

第一步,登陆豆瓣页面。

第二步,使用 QQ 页面进行授权。

第三步,授权成功跳回豆瓣首页。

想获得这份源码的同学,可以关注“低并发编程”公众号,然后回复【oauth】领取

阿里云Ubuntu部署Steam饥荒联机版服务器:从零到多人联机的完整指南 本文详细介绍了在阿里云Ubuntu系统上部署Steam饥荒联机版服务器的完整流程,包括环境准备、SteamCMD安装、服务端配置、Mod管理及后台运行技巧。通过2核4GB的ECS实例配置和端口设置,实现5人流畅联机体验,适合游戏爱好者快速搭建专属服务器。 阅读详情

相关推荐

【C++】C++异常语法、使用、规范、异常安全及异常的优缺点

实际中我们可以可以去继承exception类实现自己的异常类。但是实际中很多公司像上面一样自己定义一套异常继承体系。因为C++标准库设计的不够好用。如果有一个块抛出一个异常,捕获异常的方法会使用 try 和 catch 关键字。try 块中放置可能抛出异常的代码,try 块中的代码被称为保护代码。C++ 提供了一系列标准的异常,定义在 中,我们可以在程序中使用这些标准的异常。异常是一种处理错误的方式,

weixin_51692487的博客 1525

解决【bug】网页版豆瓣很多帖子点开直接跳转网站首页

豆瓣网页跳转主界面解决办法

creeper的博客 1万+

告别纸上谈兵:在Xilinx Artix-7 FPGA上实测RGMII接口,从ILA抓包到PC Ping通全流程记录

本文详细记录了在Xilinx Artix-7 FPGA平台上实现RGMII接口的全过程,包括硬件配置、Vivado工程设置、双沿数据转换代码实现以及ILA波形分析。通过实测数据包捕获和PC端Ping测试,验证了千兆以太网通信的稳定性和可靠性,为工业通信网关等应用提供了实用参考。

weixin_33701251的博客 287

你管这破玩意叫 OAuth

低并发编程战略上藐视技术,战术上重视技术今天,我想登陆豆瓣,看看电影评论,陶冶陶冶情操。但是,我从来没注册过豆瓣账号,而我又懒得再注册一个,怎么办呢?我打开豆瓣的官网,笑了,原来豆瓣早就为...

程序员小灰的博客 453

PyMuPDF`库实现PDF旋转功能

本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。通过使用`wx很抱歉,Markdown格式在当前聊天界面无法显示。我将为您提供纯文本格式的博客内容,您可以将其复制到Markdown编辑器中进行格式化。PDF转换工具本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。该工具使用了wxPython和PyMuPDF库。功能该PDF转换工具具有以下功能:1. 选择PDF文件:通过点击“选择文件”按钮,用户可以选择要转换的PDF文件。

Winfredzhang的博客 2735

Window系统下搭建GIT本地服务器

这是一篇在window下搭建git本地服务器的教程,带你一步步搭建出本地的git服务器。

qwer971211的博客 2万+

豆瓣爬虫:模拟登录(可直接在cmd执行)

【本代码可直接顺序复制粘贴,并用cmd运行。注意:https不要写成http】 先查看一下登录所需的信息。登录页面https://accounts.douban.com/login 按[F12]打开网页源代码 - 按[F8]寻找redir - 可将redir的value值设为你想跳转的页面。 我设为http://movie.douban.com/mine?status=collect,跳转到...

褚骏逸的学习之路 590

利用Nginx反向代理实现GitLab自定义域名的高效配置

本文详细介绍了如何利用Nginx反向代理实现GitLab自定义域名的高效配置。通过统一域名管理、性能优化和安全加固,提升GitLab的访问效率和安全性。文章包含前期准备、GitLab基础配置、Nginx反向代理设置及常见问题排查,帮助开发者快速完成部署。

weixin_28834169的博客 164

自动模拟登录豆瓣及验证码处理

items.py这个文件,如果不用item的话就可以不用写。1、自动登录豆瓣,所以要知道豆瓣的网址:https://www.douban.com/2、要找Post表单,打开源文件,找到method="post",可以看到旁边的action="https://www.douban.com/accounts/login,这个url,在一般情况下,不一定是真正的表单,如果有反爬机制强的话,很有可能就不是...

pcy1127918的博客 2497

【ARM AMBA5 CHI 2 -- CHI 链路层详细介绍 】

目前有六个版本的 CHI 协议,CHI-A 是 CHI 协议的第一个版本。它提供了一个传输层,具有减少拥塞的功能。新通道、CHI 术语和组件命名的定义;请求、监听过滤器和缓存状态转换的示例;事务排序、独占访问和分布式虚拟内存(DVM)操作的规则;CHI-B 问题扩展了 CHI-A,但不能直接向后兼容 CHI-A。更大的物理地址宽度;原子事务;DVM 的 VMID 扩展;通道字段、事务结构和可靠性、可用性和可维护性(RAS)特性的描述;

CodingCos的博客 2535

uniapp [安卓苹果App端] - 实现集成微信一键登录及授权获取用户信息全流程源码,uniApp唤起微信客户端app实现微信授权头像昵称手机号(提供移动应用/开放平台/资质认证/签名/权限申请

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,微信一键登录,uniapp项目App端实现微信登录,Uniapp实现微信授权登录,调起微信客户端授权用户信息,uniappapp端微信一键登录打开手机微信app,app端如何唤起用户本机微信应用并授权登陆,如何申请微信一键登录,uniapp实现APP微信登录流程,打开本地微信软件,接入微信登录,UniApp实现微信登录教程,获取头像昵称手机号用户数据,超详细实现微信登录功能,唤起没反应,授权失败,获取

🏆 前端领域优质创作者 1万+

图解 | 你管这破玩意儿叫网络?

你是一台电脑,你的名字叫 A很久很久之前,你不与任何其他电脑相连接,孤苦伶仃。直到有一天,你希望与另一台电脑 B 建立通信,于是你们各开了一个网口,用一根网线连接了起来。用一根网线连接起...

码农翻身 2369

基于Simulink的永磁同步电机力位混合控制(导纳+位置)仿真

本文详细介绍了基于Simulink的永磁同步电机(PMSM)力位混合控制系统实现方法。主要内容包括:1) 通过导纳控制原理(二阶质量-阻尼-弹簧模型)实现机器人柔顺控制;2) 在Simulink中构建虚拟环境、导纳控制器、PMSM驱动系统等完整框架;3) 针对曲面恒力打磨场景,实现20N恒力跟踪(RMS误差1.2N)和位置顺应;4) 支持纯位置/导纳/恒力三种工作模式切换;5) 提供系统性能评估指标和高级扩展功能。该方案显著提升了机器人环境交互的安全性和适应性,适用于精密装配、人机协作等应用场景。

xiaoheshang_123的博客 147

再见,Spring Security OAuth!!

即使 Spring Security OAuth 项目被 Spring Security 项目接管了,但 Spring Security 依旧不再包含对授权服务器的支持,你可以用商用的、开源的,或者自己搭建,反正 Spring 不再提供了,纯粹的只做框架了。这是由 Spring Security 团队领导的社区驱动项目,专注于为 Spring 社区提供授权服务器支持,该项目也开始替换了 Spring Security OAuth 提供的对于 Authorization Server 的支持。

2501_90424682的博客 1025

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

为什么你使用的 Spring Security OAuth 过期了?

最近一段时间,大家在用 Spring Security OAuth2 时可能发现有很多类过期了。 大家在选择 OAuth2 依赖的时候,可能也会困惑,有好几个地方都可以选: 那么到底选择哪一个依赖合适呢?这不同的依赖又有什么区别?今天松哥就来和大家聊一聊 Spring Security 中关于 OAuth2 的恩怨。 前言 先来大致介绍一下 OAuth2 在 Spring 框架中的发展历程。 大约十年前,Spring 引入了一个社区驱动的开源项目 Spring Security OAuth,并将其纳入

江南一点雨的专栏 9836

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

oauth2client:Google 的 OAuth 2.0 Python 客户端库

Google开源的Python库oauth2client用于处理OAuth 2.0认证流程,支持多种授权场景和Google API调用。该项目已废弃,由google-auth替代,但仍有参考价值。安装简单,代码结构清晰,适合学习OAuth 2.0协议实现。对于新项目,建议使用google-auth或社区维护的oauthlib,前者与GCP集成更紧密,后者灵活性更高。了解该库有助于维护遗留代码和解决授权相关问题。

omegamatrix65797的博客 211

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

spring oauth2 让某个账号token过期

终于要折腾oauth2了,感觉平常顺便玩玩还真没什么难度,但对于一些定制功能,什么N种账号类型,什么自定义返回体之类云云。浪费个几小时弄出下面一玩意,算是补充一下知识,在网上搜了一圈感觉也别人说--让某个账号token过期(带redis)。 打开工具看到那几个存在redis的令牌,顺便删一个,要不登录不了,要不访问不了,删不全就是麻烦,让他自己带token访问自己登出倒是简单,但对于管理权限系统...

qq_34884729的博客 6361

OAuth2、OpenID Connect简介

当我们在登录一些网站的时候,需要第三方的登录。比如,现在我们要登录简书https://www.jianshu.com/sign_in,我们使用微博登录,点击下方的一个微博的小按钮,就会出现这么一个地址https://api.weibo.com/oauth2/authorize?client_id=1881139527&redirect_uri=http%3A%2F%2Fwww.j...

diezuo9326的博客 1222

Spring Security OAuth2 的 WebSecurityConfigurerAdapter 与 ResourceServerConfigurerAdapter

WebSecurityConfigurer 是 springsecurity 框架配置的类 ResourceServerConfigurerAdapter 是 oauth2 框架配置的类 1、Spring Security的配置 Java在正常servelet处理http的请求可能会经过很多的filter,大体例子像下面这个: 而spring security又是怎么处理的呢,详见下图: 从图中可以看出spring security自己有一个叫 FilterChainProxy 代理类,该类也实现

wangooo的博客 4461

OAuth2.0密码模式废了,停止使用吧

最近一直有同学在问,OAuth2密码模式为啥Spring Security还没有实现,就连新的Spring Authorization Server也没有这个玩意儿。其实这里可以告诉大家,...

码农小胖哥 1791

被广泛使用的OAuth2.0的密码模式已经废了,放弃吧

最近一直有人在问,OAuth2密码模式为啥Spring Security还没有实现,就连新的Spring Authorization Server也没有这个玩意儿。 其实这里可以告诉大家,OAuth2密码模式废了,OAuth2 安全指南相关的章节。以后新的OAuth2实现基本不太会可能积极去适配这个模式了。诸如Auth0、JIRA等知名产品都已经在产品中移除了该模式。用的好好的为什么要移除呢?胖哥找了一些资料,大致上有几点。 OAuth2是一个授权框架 OAuth2本身是一个授权框架,它并没有对用户的认证流

m0_68064743的博客 1499

OAuth2协议 白话理解+SpringCloud Security 栗子

OAuth2协议 白话理解+SpringCloud Security 栗子引言白话理解专业名词认证授权服务和资源服务scope作用域关于白话理解搭建认证授权服务引入依赖编写认证配置(SecurityConfig)配置授权服务基于内存Token的授权服务配置基于JwtToken的授权服务配置申请token简化模式申请token申请授权码根据授权码申请token密码模式申请token刷新token检查token搭建资源服务引入依赖配置资源服务远程调用认证授权服务的TokenService资源验证基于JWT的无状

Doub1's Blog 1401

【转】C#搭建Oauth2.0认证流程以及代码示例

对于一个普遍问题,必有对应的一个简洁优美的解决方案。这也许只是一厢情愿,因为根据宇宙法则,所有事物总归趋于混沌,而OAuth协议就是混沌中的产物,不管是1.0、1.0a还是2.0,单看版本号就让人神伤。 OAuth2.0包含四种角色: 用户,又叫资源所有者 客户端,俗称第三方商户 授权服务端,颁发AccessToken 资源服务端,根据AccessToken开放相应的资源访问权限 ​本文涉及到三种授权模式:​Authorization Code模式:这是现在互联网应用中最常...

sinolover的专栏 6772
上一篇: 以程序员的视角带你看西安
下一篇: 漫画 | 面向对象之《葵花宝典》,欲练神功,必先......
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值