登录等第三方认证-outh2原理与分析

看了很多关于outh2应用文章,介绍都比较晦涩难懂,同时没有一个实际案例说明,
下面,我将使用security+outh2简单案例讲解,并通过微信认证流程解释为什么这种实现方式是最佳的。

1. Security实现Outh2登录

1.1 项目环境搭建及说明
  • 搭建springboot项目引入依赖
 		<!-- for Spring Security --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><!-- for OAuth 2.0 --><dependency><groupId>org.springframework.security.oauth</groupId><artifactId>spring-security-oauth2</artifactId></dependency>
  • 我的站点资源

默认情况下,访问会被security登录拦截,输入配置信息,即可访问到接口资源

@RestController
@RequestMapping("/api")
public class ExampleController {@RequestMapping("/hello")public String hello() {return "world";}}

用户信息配置:

security.user.name=lonk
security.user.password=lonk
  • 限制资源访问

要实现outh2方式登录后才能访问资源的话,就要对资源访问做限制,我们配置一个资源服务器

@Configuration 
@EnableResourceServer
public class OAuth2ResourceServer extends ResourceServerConfigurerAdapter {/****  配置访问权限** @param http* @throws Exception*/@Overridepublic void configure(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated().and().requestMatchers().antMatchers("/api/**"); // 对 "/api/**" 开启认证}}

配置后,访问接口就会被拦截

  • 授权服务器

授权服务器类似第三方认证,提供一个授权信息; 此时项目整体环境搭建好了,下面讲解具体认证流程。

@Configuration
@EnableAuthorizationServer
public class OAuth2AuthorizationServer extends AuthorizationServerConfigurerAdapter {@Overridepublic void configure(ClientDetailsServiceConfigurer clients) throws Exception {clients.inMemory().withClient("client_app_id").secret("pwd123456") .redirectUris("http://localhost:8080/callback").authorizedGrantTypes("authorization_code") // 授权码模式.scopes("read_userinfo") // 可授权的 Scope;}}
1.2 验证码方式认证流程
  • 获取授权码

1.浏览器访问:http://localhost:8080/oauth/authorize?
client_id=client_app_id&
redirect_uri=http://localhost:8080/callback&
response_type=code&
scope=read_userinfo
2.被拦截输入security配置用户名密码
3.验证成功,会重定向到:http://localhost:8080/callback?code=sSGEXP, code值即为授权码。

  • 获取访问token
{"access_token": "30bf2637-4e41-4891-a0c0-ffeb8b50ed7a","token_type": "bearer","expires_in": 43199,"scope": "read_userinfo"
}

在这里插入图片描述

在这里插入图片描述

  • 使用token访问限制接口
    在这里插入图片描述

2. 认证流程分析

我以微信账号登录网易音乐为例,按如下步骤说明:

2.1 网易在微信上注册信息

如果网易平台想获取微信用户的信息,微信会要求先在它的平台上注册一个应用,在申请的时候标明需要获取用户信息的哪些权限,并且在申请的时候填写你的网站域名,微信只允许在这个域名中获取用户信息。

审核通过后,会得到:

  • Client Id
  • Client Secret

微信-网站应用开发
在这里插入图片描述

2.2 用户和微信间协商

用户进入网易时,点击微信登录按钮,网易会将微信发放的Client Id交给用户,
让他进入微信授权界面:

如果用户同意,在授权页面点击了确认授权后,页面会跳转到网易预先设定的
redirect_uri并附带一个授权码code

2.3 网易访问微信

网易已经拿到授权码code,但这个code 只能表明,用户允许网易从微信上获取该用户的数据,如果其他平台拿这个code去微信访问用户数据一定会被拒绝,因为任何平台都可以持有code,微信并不知道code持有方就是谁。

此时, 网易使用用户授权的code和网易的client_id、client_secret去访问微信,拿到最后的access_token。

2.4 用户开始微信账号在网易上听音乐

网易有了access_token,通过微信提供的 API就能够访问用户的信息了,能获取用户的哪些权限通过scope做限制。

在这里插入图片描述

参考:https://blog.csdn.net/qq_40437152/article/details/84303104

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/59447.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文管理系统(登录功能)

目录 一、后端部分 1.1 实体类 1.2 UserMapper类 1.3 Service层 接口 实现类 1.4 controller层 1.5 拦截器 二、前端部分 效果图 源码如下 代码讲解 准备工作和数据库都已经准备好了,接下来我们来写登录功能,登录功能我们通过mybatisplus来码写,所以不需要在UserMapper.…

行人仿真仿而不真——基于Unity将外部仿真数据可视化

0 前言 Unity作为一款生态成熟、扩展性强、学习成本较低的三维引擎&#xff0c;近年来受到各领域研究者的青睐。具体到行人仿真领域&#xff0c;相较于传统的C/Python平台&#xff0c;Unity在效果呈现及数据交互方面具备无可比拟的优势&#xff0c;国外开发者基于Unity已经实现…

教你怎样用Python画了一棵圣诞树,快来学习

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 以下文章来源于IT入门 分享给大家一篇文章&#xff0c;教你怎样用Python画了一棵圣诞树&#xff0c;快来学习。 如何用Python画一个圣诞树呢&#xff1f; 最简单&…

分享10个Python绘制圣诞树的源码,拿来即用

大家好&#xff0c;我是丁小杰。 圣诞节就要到了&#xff0c;作为一个的“程序猿”&#xff0c;怎么能够少得了绘制圣诞树呢&#xff0c;今天就和大家分享 10 个圣诞树的绘制源码&#xff0c;拿来即用&#xff01; 搞笑版 height 5 stars 1 for i in range(height):print((…

Python代码画圣诞树--turtle绘图

效果图 代码如下 import turtle as t import random import pygame import threading import time import tkinter as tkt.screensize(bgblack) # 定义背景颜色&#xff0c;可以自己换颜色def loving_heart(r):l 2 * rt.left(45)t.forward(l)t.circle(r, 180)t.right(90)t.c…

教你用 python 画圣诞树

圣诞节快到了&#xff0c;教你用 python 画圣诞树&#xff0c;送给你女朋友&#xff0c;博主给了三个版本的圣诞树。 博主没有下载专门写 python 的 pycharm&#xff0c;用 VSCode 替代&#xff0c;因为 VSCode 也可以运行 python 代码。 还需要下载一个 python 运行环境&…

用python画圣诞树-使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例

今天为大家介绍几个Python"装逼”实例代码&#xff0c;python绘制樱花、玫瑰、圣诞树代码实例&#xff0c;主要使用了turtle库 Python绘制樱花代码实例 动态生成樱花 效果图&#xff08;这个是动态的&#xff09;&#xff1a; 实现代码 import turtle as T import ra…

【圣诞快乐】如何用代码画一颗圣诞树?

文章目录 一、前言二、创意角度三、java swing版 效果展示四、java swing版 实现步骤&代码五、springboot项目banner版 效果展示六、springboot项目banner版 实现步骤七、 linux shell界面打印版 效果展示八、 linux shell界面打印版 实现步骤 一、前言 一年一度的圣诞节来…

美美的圣诞树画出来-CoCube

2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ CSDN诚邀各位技术er分享关于圣诞节的各种技术创意&#xff0c;展现你与众不同的精彩&#xff01;参与本次投稿即可获得【话题达人】勋章【圣诞快乐】定制勋章&#xff08;1年1次&#xff0c;错过要等下一年喔&#…

圣诞树【Python版】小刘教你画圣诞树

平台准备&#xff1a; 首先安装Python及其编写平台&#xff1a; 此处小刘选择的是Python3.6版本以及PyCharm编写平台 其次安装Python所需的相关包“turtle”以及“random” Python相关包安装&#xff1a; 首先查看Python是否安装&#xff1a; 打开PyCharm在Terminal窗口输…

Python画圣诞树和烟花源代码

最近一直想让女朋友开心开心&#xff0c;眼看就到圣诞了&#xff0c;就想着来个不一样的&#xff0c;给她画个圣诞树玩一玩&#xff0c;也算是自己亲手做的&#xff0c;用了心思了。看了关于画圣诞树的很多博客&#xff0c;人才确实很多啊&#xff0c;鄙人不才&#xff0c;也加…

用python画圣诞树的代码

如何用python画一个圣诞树呢&#xff1f; 一、最简单的绘制圣诞树 代码也特别简单&#xff1a; # 最简单的绘制圣诞树height 5 # 树的高度 stars 1 # 树的雪花数&#xff0c;初始为1 for i in range(height): #…

【送给她的圣诞礼物】尝试用turtle画圣诞树

尝试用turtle画圣诞树 前言开发环境步骤一&#xff1a;加载bgm所念皆星河步骤二&#xff1a;窗口界面初始化步骤三&#xff1a;turtle初始化步骤四&#xff1a;画树的外轮廓步骤五&#xff1a;画雪花步骤六&#xff1a;画花朵步骤七&#xff1a;画五角星开源 前言 今天就是平安…

用 Python 画圣诞树的 N 种玩法

作者 | 写代码的明哥 来源 | Pyhton编程时光 马上就是圣诞节了&#xff0c;先提前祝大家圣诞快乐&#xff01; 今天来给大家分享一波如何使用 Python 来画一颗圣诞节树&#xff0c;包含多种版本&#xff0c;从平民版到豪华版&#xff0c;像极了一个程度员从入门到高级秃头程序员…

圣诞节到了,教大家用 Python 绘制几棵圣诞树~

大家好&#xff0c;我是大飞 今天是圣诞节&#xff0c;先在这里祝大家圣诞节快乐~~&#xff0c;用英语来表达就是 Merry Christmas ~~&#xff0c; 为了贴合这个氛围&#xff0c;今天分享五种用 Python 绘制圣诞树的方法&#xff0c;从基础到高级&#xff0c;效果也不断攀升分…

【圣诞来了】3分钟教你用java画一颗彩色圣诞树,送给别人作为圣诞礼物吧

⭐️写在前面 这里是温文艾尔の学习之路&#x1f44d;如果对你有帮助&#xff0c;给博主一个免费的点赞以示鼓励把QAQ&#x1f44b;博客主页&#x1f389; 温文艾尔の学习小屋⭐️更多文章&#x1f468;‍&#x1f393;请关注温文艾尔主页&#x1f345;文章发布日期&#xff1a…

如何用python画圣诞树(附圣诞树代码)

python圣诞树代码 1、简单的绘制圣诞树 新建tree1.py或者直接输入下面代码运行 #声明树的高度 height 5 #树的雪花数&#xff0c;初始为1 stars 1 #以数的高度作为循环次数 for i in range(height): print((’ ’ * (height - i)) (’*’ * stars)) stars 2 #输…

【AI金融】Can ChatGPT Forecast Stock Price Movements? Return Predictability and Large Language Models

titleChatGPT能够预测股票走势吗&#xff1f;回到可预测性与大预言模型出版时间2023年4月6日doiarXiv:2304.07619v3 [q-fin.ST]期刊arXiv类别Null关键词Statistical Finance (q-fin.ST); Computation and Language (cs.CL)文章链接https://arxiv.org/abs/2304.07619 ChatGPT可以…

AIGC—— 内容生产力革命的起点

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.AIGC 1.什么是AIGC? 2.AIGC有哪些优势与挑战 &#xff08;1&#xff0…

QQ、微信、QQ浏览器UserAgent

如果你开发过微信公众好或者手机站的话应该遇到过一些页面访问的时候会提示使用手机或者微信访问。 但是手机上面如何查看页面源码&#xff1f; 如何调试&#xff1f; 方法当然是很多的&#xff0c;下面提供一种方法&#xff1a; 使用Chrome配合UserAgent可查看微信页面。U…