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

相关文章
|
7月前
|
存储 安全 API
深入了解OAuth 2.0:探究身份验证与授权的新标准
OAuth 2.0是一种开放标准的协议,用于安全地授权第三方应用程序访问用户的资源,而无需共享用户的凭据。这一协议在互联网上广泛应用,为许多应用和服务提供了强大的身份验证和授权机制。本文将深入介绍OAuth 2.0,探讨其工作原理、关键概念和常见用途。
|
数据安全/隐私保护
关于 OAuth 2.0 统一认证授权
随着互联网的巨头大佬逐渐积累了海量的用户与数据,用户的需求越来越多样化,为了满足用户在不同平台活动的需求,平台级的厂商则需要以接口的形式开放给第三方开发者,这样满足了用户的多样性需求,也可以让自己获得利益,让数据流动起来,形成给一个良性的生态环境,最终达到用户、平台商、第三方开发者共赢。
2827 0
|
4月前
|
存储 应用服务中间件 API
Oauth 2 授权码模式
Oauth 2 授权码模式
78 1
|
4月前
|
存储 缓存 前端开发
自定义OAuth2组件实现对授权码登录模式的封装
所谓OAuth2其实就是Open Authorization,即开放授权,是一种授权机制或者说是一种协议。OAuth2允许用户授权第三方应用访问其存储在开放平台(授权服务器)中的数据而不需要提供密码。授权服务器根据OAuth2协议标准制订一套授权的API,第三方网站接入开放平台之后即可通过其提供的API来实现用户授权和获取授权服务器中用户的信息的功能。
|
9月前
|
Python
基于flask-oidc的OIDC协议授权码模式单点登录SSO实现
基于flask-oidc的OIDC协议授权码模式单点登录SSO实现
183 0
|
存储 JSON 安全
OAuth 详解<2> 什么是 OAuth 2.0 授权码授权类型?
授权代码授权类型可能是您将遇到的最常见的 OAuth 2.0 授权类型。Web 应用程序和本机应用程序都使用它在用户授权应用程序后获取访问令牌。 这篇文章是我们探索常用的 OAuth 2.0 授权类型系列文章的第一部分。如果您想在深入了解 OAuth 2.0 之前稍微回顾一下并了解更多信息,请查看OAuth 到底是什么?
100 0
OAuth 详解<2> 什么是 OAuth 2.0 授权码授权类型?
|
XML 安全 数据格式
Jasny SSO是否支持SAML认证?底层原理是什么?
Jasny SSO是否支持SAML认证?底层原理是什么?
|
API 数据安全/隐私保护
Yii2.0框架中如何进行身份验证和授权操作?支持哪些认证方式和授权方式?
Yii2.0框架中如何进行身份验证和授权操作?支持哪些认证方式和授权方式?
135 0
|
存储 NoSQL 数据库
认证授权流程及原理分析
认证授权流程及原理分析
168 0
|
安全 Java 数据库
案例之授权码模式测试|学习笔记
快速学习案例之授权码模式测试
151 0
案例之授权码模式测试|学习笔记