oauth2.0:
阮一峰理解OAuth 2.0:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
https://www.kancloud.cn/kancloud/oauth_2_0/63340
认证 (authentication) 和授权 (authorization) :先认证和授权理解OAuth 2.0:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
1.OAuth 2.0用于什么场景
2.客户端的授权模式哪4个
客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。OAuth 2.0定义了四种授权方式。
授权码模式(authorization code)
简化模式(implicit)
密码模式(resource owner password credentials)
客户端模式(client credentials)例子:OAuth 2.0 的四种方式
注意:appkey和app密钥相当于用户名和密码,请不要随意泄露
支付宝只有一个支付宝开放平台分析百度产品来理解oauth2
授权码模式(authorization code):适用于第三方登录场景
1.先获取code
response_type=code
client_id=
redirect_uri=
scope=
state=开发者自定义参数
示例:
请求:http://localhost:8080/oauth/authorize?client_id=client_id&response_type=code&redirect_uri=https://www.baidu.com&scope=all
响应:https://www.baidu.com?code=REAC334_343TGA2.获取access_token
请求参数:
grant_type=authorization_code
code
client_id
client_secret
redirect_uri:回调地址
响应结果:
{"expires_in":2592000, // Access Token的有效期为30天(以秒为单位)"refresh_token":"122.b8c5b89d815424442d8704638bc343c0.Y3CUnCwiS52HHUJQGZIQW2zcY3s4hRVLgn2UnP-.osbSkQ","access_token":"121.6bab3e059aadff2d0cc7c829f38fac6e.YH2aq-DUYn0jjkeK5xv2SpDHzAqqtJAJt0-qOGL.gJZvlA","token_type":"bearer","session_secret":"", // 可无"session_key":"", // 可无"scope":"basic super_msg"
}
token_type:表示令牌类型,该值大小写不敏感,必选项,可以是bearer类型或mac类型。
场景:第三方授权,如gitee、百度、微信、qq、支付宝、微博等授权登录、微信开放平台 https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/Before_Develop/Official_Accounts/official_account_website_authorization.html
第三方平台授权登录:涵盖十多个开发平台 https://blog.csdn.net/qq_40065776/category_9747247.html
基本流程:1.配置:去第三方应用创建待授权的应用,提供应用名称、头像、回调url以及需要获取哪些权限等参数,然后获取client_id,client_secret,回调url2.应用登录页选择第三方应用登录,跳转到第三方授权页,授权后自动调回调url,后端进行处理3.方案一:使用websocket实现前后端交互,虎牙如此方案二:回调url写前端地址如何使用其他方案?发现战旗、斗鱼回调的后端接口,没有使用websocket也能实现?用户扫码后后会跳到你配置的回调地址上!!!但是因为代码中返回是success,用户收到的只是个字符串。所以此处因该是配置支付宝去回调前端地址 然后参数让前端原封不动传向后端 后端解析成功后,前端引导用户进行下一步操作
例子:
使用gitee集成第三方登录:https://www.jb51.net/article/218808.htm
使用支付宝集成第三方登录:https://www.jb51.net/article/216554.htm
一般第三方可信知名大公司才使用,小公司不用简化模式
这种模式比授权码模式少了 code 环节,回调 url 直接携带 token。授权之后直接带着access_token访问回调接口,而不是像授权模式带着code访问回调接口
如:springboot-demo项目在支持第三方登录,第三方确认授权回调后,直接带着token访问vue-demo的登录成功后的页面
示例:
请求:http://localhost:8080/oauth/authorize?client_id=client_id&response_type=token 注意和授权模式第一步的response_type不一样
响应:https://www.baidu.com/#access_token=5cd97af4-4ccb-41a1-ad6f-14c8c11c0cc7&token_type=bearer&expires_in=1799&scope=all客户端模式(client credentials):客户端就是用户,自身申请认证。无需登录服务型接口
百度AI开放平台(https://ai.baidu.com/ ):语音识别、文字识别、人脸与人体、图像技术、文字翻译等等
百度地图开放平台:创建一个应用(有ak),请求直接带着 ak=你的密钥 即可,ak即app_key(不属于客户端模式)
示例:百度图文识别
1.获取accesss_token
grant_type=client_credentials
client_id
client_secret
返回结果
{"refresh_token": "25.f817a0151c84c64cb1b2bf50f5b64cb8.315360000.1990575555.282335-26242661","expires_in": 2592000,"access_token": "24.c16bfe6b799b2a4e00b5637dae7ae7e6.2592000.1677807555.282335-26242661","scope": "public vis-ocr_ocr brain_ocr_scope brain_ocr_general brain_ocr_general_basic vis-ocr_business_license brain_ocr_webimage brain_all_scope brain_ocr_idcard brain_ocr_driving_license brain_ocr_vehicle_license vis-ocr_plate_number brain_solution brain_ocr_plate_number brain_ocr_accurate brain_ocr_accurate_basic brain_ocr_receipt brain_ocr_business_license brain_solution_iocr brain_qrcode brain_ocr_handwriting brain_form brain_ocr_passport brain_ocr_vat_invoice brain_numbers brain_ocr_business_card brain_ocr_train_ticket brain_ocr_taxi_receipt vis-ocr_household_register vis-ocr_vis-classify_birth_certificate vis-ocr_台湾通行证 vis-ocr_港澳通行证 vis-ocr_机动车购车发票识别 vis-ocr_机动车检验合格证识别 vis-ocr_车辆vin码识别 vis-ocr_定额发票识别 vis-ocr_保单识别 vis-ocr_机打发票识别 vis-ocr_行程单识别 brain_ocr_vin brain_ocr_quota_invoice brain_ocr_birth_certificate brain_ocr_household_register brain_ocr_HK_Macau_pass brain_ocr_taiwan_pass brain_ocr_vehicle_invoice brain_ocr_vehicle_certificate brain_ocr_air_ticket brain_ocr_invoice brain_ocr_insurance_doc brain_formula brain_seal brain_ocr_facade brain_ocr_meter brain_doc_analysis brain_ocr_webimage_loc brain_ocr_medical_paper brain_ocr_doc_analysis_office brain_vat_invoice_verification brain_ocr_medical_detail brain_vehicle_registration_certificate brain_ocr_online_taxi_itinerary brain_ocr_multi_idcard brain_ocr_mixed_multi_vehicle brain_ocr_weigth_note brain_ocr_ multiple_invoice brain_form_table wise_adapt lebo_resource_base lightservice_public hetu_basic lightcms_map_poi kaidian_kaidian ApsMisTest_Test权限 vis-classify_flower lpq_开放 cop_helloScope ApsMis_fangdi_permission smartapp_snsapi_base smartapp_mapp_dev_manage iop_autocar oauth_tp_app smartapp_smart_game_openapi oauth_sessionkey smartapp_swanid_verify smartapp_opensource_openapi smartapp_opensource_recapi fake_face_detect_开放Scope vis-ocr_虚拟人物助理 idl-video_虚拟人物助理 smartapp_component smartapp_search_plugin avatar_video_test b2b_tp_openapi b2b_tp_openapi_online smartapp_gov_aladin_to_xcx","session_key": "9mzdWEHj+3F3+Ju0LJPiwE8K6c/dLwBjaBoWcKQyFzjr/YHzGbOGLs6NAxqHOBj6Tqyiy/gQ6+MX2zSZ2GSFJayZ8V9KUA==","session_secret": "ce189b0cb1ec5f9ff6257c8a5c3263d3"
}说明:
用户端界面展示AppID、API Key、Secret Key 多款产品采用这种方式
请求参数:grant_type=client_credentials(写死)、client_id、client_secret
向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以上参数。
服务器将返回json文本参数
{"refresh_token": "25.1c1a200aa7f67da1c1adb9f5d22a31ee.315360000.1968769092.282335-26242661","expires_in": 2592000,"access_token": "24.35b36685af61834759443ef99b5ce830.2592000.1656001092.282335-26242661","scope": "public vis-ocr_ocr brain_ocr_scope brain_ocr_general brain_ocr_general_basic vis-ocr_business_license","session_key": "9mzdCPGMqkNZ1wGN7HePHhNoHdwd8lZv+jOE5e8eVRGOV3JpMjv0BsqSpVYjan5KCWUdP8xHtpxIbbY/qMQ14aoXMDdzgg==","session_secret": "c4fc1e842004527ea446a7fcc6b6441b"
}
access_token:要获取的Access Token;
expires_in:Access Token的有效期(秒为单位,有效期30天);
其他参数忽略,暂时不用;
若请求错误,服务器将返回的JSON文本包含以下参数:
error: 错误码;关于错误码的详细信息请参考下方鉴权认证错误码。
error_description: 错误描述信息,帮助理解和解决发生的错误。
例如,认证失败返回:
{"error": "invalid_client","error_description": "unknown client id"
}如:百度智能云
疑问:为什么需要两个参数:API Key、Secret Key?一个不行吗?
API Key如同账号、Secret Key如同密码
如果只提供API Key,可能会被暴力获取。Secret Key如同签名,证明你就是API Key
场景:通用型接口提供给可需要的用户使用,无需登录,如地图服务接口、天气预报接口密码模式
就是为了解决遗留项目升级为 oauth2 的适配方案
场景:通用的账号密码登录场景,用户向客户端提供自己的用户名和密码,这通常用在用户对客户端高度信任的情况。这种情况大多是内部系统之间进行访问。security实现oauth2:
Spring Security Oauth2:
授权码模式,密码模式,客户端模式:https://blog.csdn.net/qq_22624361/article/details/88557279
SpringSecurity-OAuth2万文详解:https://zhuanlan.zhihu.com/p/496695229
密码模式:https://blog.csdn.net/Andy2019/article/details/106582226/、https://blog.csdn.net/xiaoxiaole0313/article/details/118484750
授权模式:https://blog.csdn.net/qq_48078182/article/details/126318028、https://blog.csdn.net/Cwh_971111/article/details/118208759访问http://localhost:8080/oauth/authorize?client_id=client_id_demo&response_type=code获取授权码的时候,提示403,是因为授权的时候,需要用户登录,否则会跳转到登录页面,如果跳转到登录没有访问权限,则会返回403,需要加一句.and().formLogin().permitAll()解决:https://gitee.com/log4j/pig/issues/I15YFL
客户端模式:https://blog.csdn.net/qq_36221788/article/details/119740450在spring-security-oauth2中有这几个默认接口,按照以下接口访问顺序获取用户信息:
/oauth/authorize:获取授权码
/oauth/token:根据授权码获取令牌
/user/getUser:根据令牌获取user资源信息
Springsecurity-oauth2之/oauth/token的处理:https://blog.csdn.net/weixin_34257076/article/details/92315818

spring security(三)oauth2相关推荐

  1. Spring Security 与 OAuth2 介绍

    个人 OAuth2 全部文章 Spring Security 与 OAuth2(介绍):https://www.jianshu.com/p/68f22f9a00ee Spring Security 与 ...

  2. Spring Security、oauth2、单点登陆SSO的关系

    文章目录 概述 1. 什么是Spring Security 1.1 配置示例 1.2 spring security 基本原理 1.2 Spring Security存在的问题 2. 什么是oauth ...

  3. Spring boot使用Spring Security和OAuth2保护REST接口

    在本文中,我将会演示SpringSecurity+OAuth2如何去保护SpringBoot上的RESTAPI端点,以及客户端和用户凭证如何存储在关系数据库中.因此,我们需要做到以下几点: 配置Spr ...

  4. Spring Security(三) —— 加密系统

    一:加密系统简介 最早我们使用类似SHA-256这样的单向Hash算法.用户注册成功后,保存在数据库中的不再是用户的明文密码,而是经过SHA-256加密计算的一个字符串,当用户进行登录时,将用户输入的 ...

  5. spring security 5 oauth2认证服务器开发

    注:本文节选自 spring security 5.x 的介绍,原文包含介绍.技术选型.spring security 的使用.可以运行的oauth2认证demo工程,如何开发自己的脚手架等.原文地址 ...

  6. Spring Security 详解与实操第五节 JWT和Oauth2

    令牌扩展:如何使用 JWT 实现定制化 Token? 上一讲我们详细介绍了在微服务架构中如何使用 Token 对微服务的访问过程进行权限控制,这里的 Token 是类似"b7c2c7e0-0 ...

  7. (二)spring security:使用 OAuth2 SSO 实现单点登录

    一.前言 也许,我应该延续上一篇"(一)spring security:能做什么?"接着写,比如:如何实现RBAC权限动态控制.后端"验证码"生成与校验.JWT ...

  8. Spring Security OAuth2——自定义OAuth2第三方登录(Gitee)并与UsernamePassword登录关联解决方案

    前文:Spring Security OAuth2--自定义OAuth2第三方登录(Gitee) Maven 主要 <!--Spring Security--><dependency ...

  9. Spring Security OAuth2——自定义OAuth2第三方登录(Gitee)

    官方文档 https://docs.spring.io/spring-security/site/docs/current/reference/html5/#oauth2login-custom-pr ...

  10. Spring Security OAuth2整合JWT

    文章目录 1. Spring Security 与 OAuth2 2. Spring Security OAuth2的配置和使用 ①:引入依赖 ②:配置 spring security ③:配置授权服 ...

最新文章

  1. vi/vim: 使用taglist插件
  2. 用 Flask 来写个轻博客 (4) — (M)VC_创建数据模型和表
  3. ML之NBLoR:利用NB(朴素贝叶斯)、LoR(逻辑斯蒂回归)算法(+TfidfVectorizer)对Rotten Tomatoes影评数据集进行文本情感分析—五分类预测
  4. DayDayUp:2019春节电影《疯狂的外星人》和《新喜剧之王》两部电影观后感
  5. html禁止文本选择,[译]用CSS来禁止文本选择
  6. 一步步用zTree(2)
  7. hdu 4545 魔法串 2013金山西山居创意游戏程序挑战赛——初赛(1)
  8. 选了combobox里的选项后没激发change事件_stata 事件分析法
  9. java判断斐波那契数列_Java 实例 - 斐波那契数列
  10. python学习笔记之random模块
  11. 阿里maven 仓库地址
  12. Python简单版本flappy_bird
  13. 基于Python+网络爬虫的兼职招聘就业信息数据可视化分析
  14. 本地硬盘如何重装系统Win11?
  15. Vue项目实战 —— 后台管理系统( pc端 )
  16. 平板android10英寸,华硕推出8/10英寸ZenPad Android平板新品
  17. ApacheCN 机器学习译文集 20211111 更新
  18. 【翻译】--19C Oracle 安装指导
  19. Efficient Estimation of Word Representations in Vector Space
  20. 浅谈ALM与PLM区别

热门文章

  1. java毕业设计闲一品交易平台mybatis+源码+调试部署+系统+数据库+lw
  2. Oracle本地管理的表空间
  3. A - Cthulhu CodeForces - 103B (并查集)
  4. anaconda安装教程-手把手教你安装
  5. 游戏SDK(三)架构设计之代码实现1
  6. 抖音平台对短视频流量扶持力度大,现在加入来得及吗
  7. 极限题型一:求函数极限常见题型
  8. BeanShell获取尽可能不重复18位数字
  9. 计算机未连接到网络但是可以上网,win10系统能上网但图标显示未连接的解决办法...
  10. 京东云与金山云合并!云计算行业真的要大洗牌吗?