OAuth 2.0认证-授权码模式的理解和实例分析

简介: 目前OAuth 2.0 认证有五种方式,见官方文档:http://www.rfcreader.com/#rfc6749 授权码模式(Authorization Code Grant) 流程图 说明:1,认证服务器是一个业务无关的系统;2,code就是授权码,只能使用一次;3,token 在有效期内可以无限次使用 场景化讲解-下单 场景:A 公司旗下有很多 web 产品,同时还有一个应用商店(类似京东)负责售卖这些软件产品,下面以用户进入应用商店购买产品的流程着手。

目前OAuth 2.0 认证有五种方式,见官方文档:http://www.rfcreader.com/#rfc6749

授权码模式(Authorization Code Grant)

流程图

image.png

说明:
1,认证服务器是一个业务无关的系统;
2,code就是授权码,只能使用一次;
3,token 在有效期内可以无限次使用

场景化讲解-下单

场景:A 公司旗下有很多 web 产品,同时还有一个应用商店(类似京东)负责售卖这些软件产品,下面以用户进入应用商店购买产品的流程着手。

  1. 应用商店通过浏览器尝试获取下单页;
  2. 应用商店后台鉴权,发现没有登录(应用商店后台实际会调用认证服务器,比如校验 access tokensh是否有效);
  3. 跳转到登录页面;(对应上图(A))
  4. 用户通过浏览器输入用户名,密码等方式进行授权(此时会调用认证服务器接口);(对应上图(B))
  5. 认证服务器返回临时 code 给浏览器;(对应上图(C))
  6. 应用商店拿临时 code 去调用认证服务器接口,换取 access token;(对应上图(D))
  7. 认证服务器返回 access token给应用商店;(对应上图(E))
  8. 应用商店把 access token 缓存下来。
  9. 后续应用商店调用业务系统(比如下单接口,订单查询接口)接口均带上 access token;

场景化讲解-微信公众号授权

现在很多微商系统接入了微信公众号,通过微信公众号售卖产品,那么它们是如何获取用户信息的呢?
我们在关注某个商店性质的微信公众号时,经常会弹出如下对话框,要求我们授权
image.png
图2-1
用户点击上述界面中的"允许",对应的操作是“"授权码模式"的(B)-- User authenticates:
image.png

具体流程如下:

  1. 某微信公众号B 访问用户信息,用于下单支付(实际需要用户的 openid);
  2. 图2-1,微信弹框,要求用户授权;
  3. 用户点击"允许"授权,某微信公众号B才能获取到临时 code;
  4. 某微信公众号B拿临时 code调用微信鉴权接口获取 access token 或 openid;

实例3-对接钉钉通讯录实现登录

免登流程

第一步:通过用户授权获取code
授权链接:
https://h5.dingtalk.com/liveeasylogin/index.html#/index?appid=dingoae2vmockd44q2&response_type=code&scope=snsapi_auth&state=STATE&redirect_uri=http%3A%2F%2Flocalhost%3A7001%2Fapi%2Ftest%2FtestCode.json

第二步:用户授权
image.png

授权成功获取code

{"content":"code=4d9954574c32afafd9xxx3c34b414aa&state=STATE","errorLevel":0,"success":true}

image.png

code 值为:4d9954574c32afafd9xxx3c34b414aa

授权测试地址

dingtalk://dingtalkclient/page/link?url=https%3A%2F%2Fh5.dingtalk.com%2Fliveeasylogin%2Findex.html%23%2Findex%3Fappid%3Ddingoaemockdlfr66612%26response_type%3Dcode%26scope%3Dsnsapi_auth%26state%3DSTATE%26redirect_uri%3Dhttp%253A%252F%252Floca77host%253A7001%252Fapi%252Ftest%252FtestCode.json%3fddtab%3dtrue

code有什么用?

  1. 可以获取用户信息;
  2. 可以获取access_token

获取用户信息

//获取用户信息
        DefaultDingTalkClient client = new DefaultDingTalkClient(DingTalkConstants.URL_GET_USER_INFO_BY_CODE);
        OapiSnsGetuserinfoBycodeRequest request = new OapiSnsGetuserinfoBycodeRequest();
        request.setTmpAuthCode(requestAuthCode);
        request.setHttpMethod(HttpMethod.POST.toString());

        OapiSnsGetuserinfoBycodeResponse response;
        try {
            response = client.execute(request, dingTalkProperties.getAppid(), dingTalkProperties.getAppsecret());
        } catch (ApiException e) {
            logger.error("accessToken:{0}, url:{1}", "", DingTalkConstants.URL_GET_USER_INFO_BY_CODE, e);
            return null;
        }

        LoginedUser loginedUser = null;
        if (response.isSuccess() && null != response.getUserInfo()) {
            OapiSnsGetuserinfoBycodeResponse.UserInfo userInfo = response.getUserInfo();

获取access_token

参考

http://www.rfcreader.com/#rfc6749

相关文章
|
消息中间件 存储
RabbitMQ的高可用机制
RabbitMQ 提供了多种高可用机制来确保消息队列的可靠性和稳定性。
1303 0
|
存储 JavaScript 前端开发
Vue3 详细教程及实例(完整版)
Vue3 详细教程及实例(完整版)
1149 0
|
4月前
|
Java 编译器 Go
【Golang】(5)Go基础的进阶知识!带你认识迭代器与类型以及声明并使用接口与泛型!
好烦好烦好烦!你是否还在为弄不懂Go中的泛型和接口而烦恼?是否还在苦恼思考迭代器的运行方式和意义?本篇文章将带你了解Go的接口与泛型,还有迭代器的使用,附送类型断言的解释
246 3
|
运维 前端开发 C#
一套以用户体验出发的.NET8 Web开源框架
一套以用户体验出发的.NET8 Web开源框架
375 7
一套以用户体验出发的.NET8 Web开源框架
|
自然语言处理 负载均衡 API
gRPC 一种现代、开源、高性能的远程过程调用 (RPC) 可以在任何地方运行的框架
gRPC 是一种现代开源高性能远程过程调用(RPC)框架,支持多种编程语言,可在任何环境中运行。它通过高效的连接方式,支持负载平衡、跟踪、健康检查和身份验证,适用于微服务架构、移动设备和浏览器客户端连接后端服务等场景。gRPC 使用 Protocol Buffers 作为接口定义语言,支持四种服务方法:一元 RPC、服务器流式处理、客户端流式处理和双向流式处理。
|
人工智能 自然语言处理 数据处理
LazyGraphRAG:微软推出的图形增强生成增强检索框架
LazyGraphRAG是微软研究院推出的图形增强生成增强检索框架,旨在大幅降低数据索引成本并提高查询效率。该框架结合了最佳优先搜索和广度优先搜索,支持本地和全局查询,适用于一次性查询、探索性分析和流数据处理。LazyGraphRAG将加入开源的GraphRAG库,为开发者和企业提供更高效的技术支持。
678 0
LazyGraphRAG:微软推出的图形增强生成增强检索框架
|
弹性计算 运维 搜索推荐
阿里云建站方案参考:云服务器、速成美站、企业官网区别及选择参考
随着数字化转型的浪潮不断推进,越来越多的企业和公司开始将业务迁移到云端,而搭建一个专业、高效的企业官网成为了上云的第一步。企业官网不仅是展示公司形象、产品和服务的重要窗口,更是与客户沟通、传递价值的关键渠道。随着阿里云服务器和建站产品的知名度越来越高,越来越多的用户选择阿里云的产品来搭建自己的官网。本文将深入探讨在阿里云平台上,如何选择最适合自己的建站方案:云服务器建站、云·速成美站还是云·企业官网。
731 14
阿里云建站方案参考:云服务器、速成美站、企业官网区别及选择参考
|
人工智能 Docker 容器
一、轻松部署的大模型开发平台dify.ai
一、轻松部署的大模型开发平台dify.ai
1160 0
|
前端开发 PHP 数据格式
【附带效果视频】php接口给前端返回流式数据,php使用event-stream进行数据推送,循环一次输出一次
【附带效果视频】php接口给前端返回流式数据,php使用event-stream进行数据推送,循环一次输出一次
644 0
|
Java
如何获取第三方应用授权app_auth_token
一,说明    1.第三方应用文档:[url]https://docs.open.alipay.com/20160728150111277227/intro[/url]     2.作用:代替商户发起相关逻辑请求 二,配置    1.
5857 12