精华内容
参与话题
问答
  • 包含 1.Getting Started with OAuth 2.0.pdf 2.Mastering OAuth 2.0.pdf 3.Oauth2 in Action.pdf 4.OAuth2.0 Cookbook.pdf
  • 一、OAuth2.0 介绍 1.1 OAuth 认证标准 OAuth(开放授权) 是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容,...

    一、OAuth2.0 介绍

    1.1 OAuth 认证标准

    OAuth(开放授权) 是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容,OAuth2.0 是 OAuth 协议的延续版本。

     

    1.2 OAuth 和 OAuth2.0的区别

    引用:

    https://blog.csdn.net/u013436121/article/details/23631885

     

    1.3 OAuth2.0 认证流程

    OAuth2.0 的模块分为几部分:

    • 客户端:本身不存储资源,需要通过用户的授权去请求资源服务器的资源。客户端如:商城安卓端、商城web端等
    • 资源拥有者:通常为用户,即该资源信息的拥有者
    • 认证服务器:用例对资源拥有者的身份进行认证,对访问资源授权。客户端想要访问资源,必须使用资源拥有者给予的授权码来认证服务器获取令牌
    • 资源服务器:存储资源的服务器,如用户信息等。客户端最终使用令牌从资源服务器获取信息

            

    例如:使用微信登录商城

    1.4 OAuth2.0 授权模式

    • 授权码模式(Authorization Code) => 常用
    • 密码模式(Resource Owner Password Credentials) => 常用
    • 隐式授权模式(Implicit) => 不常用
    • 客户端模式(Client Credentials) => 不常用

     

    1.5 授权码模式流程

    • 客户端请求第三方授权
    • 用户同意给客户端授权
    • 客户端获取到授权码,请求认证服务器申请令牌
    • 认证服务器向客户端响应令牌
    • 客户端请求资源服务器的资源,资源服务校验令牌合法性,完成授权
    • 资源服务器返回受保护资源

     

    二、SSO 实现(SpringSecurity + Oauth2.0)

    使用 Spring security + Oauth2.0 实现用户认证和用户授权。 Spring security 是一个强大的和高度可定制的身份验证和访问控制框架,其继承了 Oauth2.0 协议。

    2.1 流程模型图

      

      

     

     

    2.2 非对称加密算法实现本地令牌验证

    由于传统的授权模式性能低下,每次都需要请求授权服务器校验令牌合法性,则会造成多于的请求,且拖慢响应速度。故使用非对称算法,利用公钥私钥完成对令牌的加密。

    若加密成功,则表示令牌合法。若校验失败,则令牌无效不合法。

    旧框架:

      

    新框架: 本地令牌验证

      

     

    2.2.1 RSA 非对称算法介绍

    特点:公钥和私钥是成对的,它们互相解密

    加解密: 公钥加密,私钥解密

    签名:私钥签名,公钥验签

    转载:RSA公钥,私钥和数字签名简单理解

     

    2.2.2 生成公私钥

    生成秘钥证书

    秘钥证书中包含公钥和私钥

    创建一个文件夹,并执行如下命令

    keytool -genkeypair -alias tom -keyalg RSA -keypass tomtom -keystore tom.jks -storepass tomtom

    Keytool 是一个 java 的证书管理工具

    -alias:密钥的别名
    -keyalg:使用的 hash 算法
    -keypass:密钥的访问密码,能够读出证书
    -keystore:密钥库文名
    -storepass:密钥库的访问密码,能够解密数据

      

    相关操作命令

    # 查看证书信息
    keytool -list -keystore tom.jks
    
    # 删除别名
    keytool -delete -alias tom -keystore tom.jks

     

    2.2.3 导出公钥

    可以使用 openssl 来导出公钥信息

    下载地址:

    http://slproweb.com/products/Win32OpenSSL.html

    网盘下载:

    链接:https://pan.baidu.com/s/1Ov3gUtpGPHKFSc9iqC-sug     提取码:ir26

    配置环境变量:

    OPENSSL_CONF
    D:\Common\OpenSSL-Win64\bin\openssl.cfg

      

    在 Path 中增加:

    D:\Common\OpenSSL-Win64\bin

      

    导出公钥

    keytool -list -rfc --keystore tomtom.jks | openssl x509 -inform pem -pubkey

      

    保存公钥到文件中,公钥必须整理成同一行

      

    修改配置文件:

    2.2.4 测试

    import com.alibaba.fastjson.JSON;
    import org.junit.Test;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.security.jwt.Jwt;
    import org.springframework.security.jwt.JwtHelper;
    import org.springframework.security.jwt.crypto.sign.RsaSigner;
    import org.springframework.security.jwt.crypto.sign.RsaVerifier;
    import org.springframework.security.rsa.crypto.KeyStoreKeyFactory;
    
    import java.security.KeyPair;
    import java.security.PrivateKey;
    import java.security.interfaces.RSAPrivateKey;
    import java.util.HashMap;
    import java.util.Map;
    
    public class CreateJWTTestDemo {
    
        @Test
        public void testCreateToken() {
            // 加载证书
            ClassPathResource resource = new ClassPathResource("tomtom.jks");
            // 读取证书数据
            KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(resource, "tomtom".toCharArray());
    
            //  获取证书中的一对秘钥
            KeyPair keyPair = keyStoreKeyFactory.getKeyPair("tomtom", "tomtom".toCharArray());
    
            // 获取私钥
            RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
    
            // 创建令牌,使用私钥加盐[RSA]
            Map<String, Object> payload = new HashMap<String, Object>();
            payload.put("nickname", "tomcat");
            payload.put("address", "xiamen");
            payload.put("role", "admin, user");
    
            Jwt jwt = JwtHelper.encode(JSON.toJSONString(payload), new RsaSigner(privateKey));
    
            // 获取令牌数据
            String token = jwt.getEncoded();
    
            System.out.println(token);
        }
    
        @Test
        public void testParseToken() {
            String token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhZGRyZXNzIjoieGlhbWVuIiwicm9sZSI6ImFkbWluLCB1c2VyIiwibmlja25hbWUiOiJ0b21jYXQifQ.A0QrW0_Kk66G4fMdbFKPwJdsWmkwXJ4-8pymoJe28KGfuWtjOJKLZxdzjPuw9wItjoxTNHMWDCrLOxLCVuKbShIxpJDsmWecrmSjR6a8ZqBXqtw3-V_C-AYqJlyxHy7rfzCZzZDQ8GvyY7u4cFcx-iv42g9yVOLDc2DpnzvQ9uoLNYrqQuhagmEUtqrgHMX5OBYM1OP11VEjURVRt2tCOHX2Q285rkN-bgFgXtyscBkjjf5IGbiDXi6sofLTi_Ei2lEftvbhLNAi1LEQitCaZlqkh_ZsQ4d2RtJmP_vkRKCBHRhe0PNChIg0KI5TJ8fDeHgMfsEahcKbNfDdujfRzA";
            String publicKey = "-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmI1RoiNIK6nP+GrlCTPSSR1ResUCDLHQ5o6kyA9wyqYj/8S8Xgjyp9AKf8e0AB+Yid0mjtVHQyt3PSXPPSAvypeKvGWyVaCuLEmUtE1FX2VcvPqdmEiGBhtF1cwGh+9DAGxp0tNUjbsVaS3A3QxR5MLWTbMJZFGlD2xhKjGc8qju/3UHKgbH1SDZKBJRk+Wdv7AWO5nf9sH2KDBo4Vm2HMwhfoPrrslIEBNfcaRqD317n5szvtDGd6zMSYA9ENOQ8dx1Yf2bve/B2jTQVdtO+v3uhKn2AAOChvVmjpdvVxXFWDmEBy+nUpMswMjheizlo0AWs8BqXdns9geY1E6icQIDAQAB-----END PUBLIC KEY-----";
            Jwt jwt = JwtHelper.decodeAndVerify(token,
                    new RsaVerifier(publicKey));
            String claims = jwt.getClaims();
            System.out.println(claims);
        }
    }
    

     

    2.3 流程分析

        

    流程分析:

    • 用户登录,请求认证服务
    • 认证服务认证通过,生成 jwt 令牌,并写入 cookie 中
    • 用户访问资源时,带着 cookie 到网关
    • 网关从 cookie 中获取 token,如果存在 token,则验证其合法性,若不合法则拒绝访问,合法则放行
    • 用户退出时,请求认证服务,删除 cookie 中的 token

     

     

     

     

     

     

     

     

     

    展开全文
  • oauth2.0

    2020-12-28 08:48:55
    OAuth2.0 OAuth2.0是OAuth协议的延续版本,但不向前兼容OAuth 1.0(即完全废止了OAuth1.0)。 OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,要么允许第...

    OAuth2.0

    OAuth2.0是OAuth协议的延续版本,但不向前兼容OAuth 1.0(即完全废止了OAuth1.0)。 OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,要么允许第三方应用代表用户获得访问的权限。同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。2012年10月,OAuth 2.0协议正式发布为RFC 6749 [1]  。

    中文名

    开放授权

    外文名

    OAuth2.0

    定    义

    协议的下一版本

    简易性

    OAuth1.0。 OAuth 2.0

    应用领域

    计算机网路、认证

    娱    乐

    视频

    目录

     

    1. 前言
    2. 认证授权过程
    3. ▪ 简单历史回顾
    4. ▪ 6种全新流程

    前言

     

    OAuth 1.0已经在IETF(国际互联网工程任务组),编号是RFC5849

    这也标志着OAuth已经正式成为互联网标准协议。

    OAuth 2.0早已经开始讨论和建立的草案。OAuth2.0很可能是下一代的“用户验证和授权”标准。现在百度开放平台腾讯开放平台等大部分的开放平台都是使用的OAuth 2.0协议作为支撑。

    OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

    OAuth

    允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。

    OAuth是OpenID的一个补充,但是完全不同的服务。

    OAuth 2.0

    是OAuth协议的下一版本,但不向后兼容OAuth 1.0。 OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。2012年10月,OAuth 2.0协议正式发布为RFC 6749 [1]  。

    Facebook的新的Graph API只支持OAuth 2.0,Google在2011年3月亦宣布Google API对OAuth 2.0的支持。

    认证授权过程

     

    在认证和授权的过程中涉及的三方包括:

    1、服务提供方,用户使用服务提供方来存储受保护的资源,如照片,视频,联系人列表。

    2、用户,存放在服务提供方的受保护的资源的拥有者。

    3、客户端,要访问服务提供方资源的第三方应用,通常是网站,如提供照片打印服务的网站。在认证过程之前,客户端要向服务提供者申请客户端标识。

    使用OAuth进行认证和授权的过程如下所示:

    用户想操作存放在服务提供方的资源。

    用户登录客户端向服务提供方请求一个临时令牌。

    服务提供方验证客户端的身份后,授予一个临时令牌。

    客户端获得临时令牌后,将用户引导至服务提供方的授权页面请求用户授权。在这个过程中将临时令牌和客户端的回调连接发送给服务提供方。

    用户在服务提供方的网页上输入用户名和密码,然后授权该客户端访问所请求的资源。

    授权成功后,服务提供方引导用户返回客户端的网页。

    客户端根据临时令牌从服务提供方那里获取访问令牌。

    服务提供方根据临时令牌和用户的授权情况授予客户端访问令牌。

    客户端使用获取的访问令牌访问存放在服务提供方上的受保护的资源。

    简单历史回顾

     

    OAuth 1.0在2007年的12月底发布并迅速成为工业标准。

    2008年6月,发布了OAuth 1.0 Revision A,这是个稍作修改的修订版本,主要修正一个安全方面的漏洞。

    2010年四月,OAuth 1.0的终于在IETF发布了,协议编号RFC 5849。

    OAuth 2.0的草案是在2011年5月初在IETF发布的。

    OAuth is a security protocol that enables users to grant third-party access to their web resources without sharing their passwords.

    OAuth是个安全相关的协议,作用在于,使用户授权第三方的应用程序访问用户的web资源,并且不需要向第三方应用程序透露自己的密码。

    OAuth 2.0是个全新的协议,并且不对之前的版本做向后兼容,然而,OAuth 2.0保留了与之前版本OAuth相同的整体架构。

    这个草案是围绕着 OAuth2.0的需求和目标,历经了长达一年的讨论,讨论的参与者来自业界的各个知名公司,包括Yahoo!, Facebook, Salesforce, Microsoft, Twitter, Deutsche Telekom, Intuit, Mozilla, and Google。

    OAuth 2.0的新特性:

    6种全新流程

     

    User-Agent Flow – 客户端运行于用户代理内(典型如web浏览器)。

    Web Server Flow – 客户端是web服务器程序的一部分,通过http request接入,这是OAuth 1.0提供的流程的简化版本。

    Device Flow – 适用于客户端在受限设备上执行操作,但是终端用户单独接入另一台电脑或者设备的浏览器

    Username and Password Flow – 这个流程的应用场景是,用户信任客户端处理身份凭据,但是仍然不希望客户端储存他们的用户名和密码,这个流程仅在用户高度信任客户端时才适用。

    Client Credentials Flow – 客户端适用它的身份凭据去获取access token,这个流程支持2-legged OAuth的场景。

    Assertion Flow – 客户端用assertion去换取access token,比如SAML assertion。

    可以通过使用以上的多种流程实现Native应用程序对OAuth的支持(程序运行于桌面操作系统或移动设备)

    application support (applications running on a desktop or mobile device) can be implemented using many of the flows above.

    持信人token

    OAuth 2.0 提供一种无需加密的认证方式,此方式是基于现存的cookie验证架构,token本身将自己作为secret,通过HTTPS发送,从而替换了通过 HMAC和token secret加密并发送的方式,这将允许使用cURL发起APIcall和其他简单的脚本工具而不需遵循原先的request方式并进行签名。

    签名简化:

    对于签名的支持,签名机制大大简化,不需要特殊的解析处理,编码,和对参数进行排序。使用一个secret替代原先的两个secret。

    短期token和长效的身份凭据

    原先的OAuth,会发行一个 有效期非常长的token(典型的是一年有效期或者无有效期限制),在OAuth 2.0中,server将发行一个短有效期的access token和长生命期的refresh token。这将允许客户端无需用户再次操作而获取一个新的access token,并且也限制了access token的有效期。

    角色分开

    OAuth 2.0将分为两个角色:

    Authorization server负责获取用户的授权并且发布token。

    Resource负责处理API calls。

    展开全文
  • OAuth 2.0

    2020-04-14 22:21:47
  • OAuth 2.0 (一)——对 OAuth 2.0 的理解 1. 是什么 OAuth 2.0 OAuth 是一个关于认证、授权的标准。而 Spring Security OAuth 是 Spring Boot 对 OAuth 的实现。目前 OAuth 的最高版本是 2.0版。 2. 为什么使用 ...

    OAuth 2.0 (一)——对 OAuth 2.0 的理解

    1. 是什么 OAuth 2.0

    OAuth 是一个关于认证、授权的标准。而 Spring Security OAuth 是 Spring Boot 对 OAuth 的实现。目前 OAuth 的最高版本是 2.0版。

    2. 为什么使用 OAuth 2.0

    有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让"云冲印"读取自己储存在Google上的照片。

    问题是只有得到用户的授权,Google才会同意"云冲印"读取这些照片。那么,"云冲印"怎样获得用户的授权呢?

    传统方法是,用户将自己的Google用户名和密码,告诉"云冲印",后者就可以读取用户的照片了。这样的做法有以下几个严重的缺点。

    1. "云冲印"为了后续的服务,会保存用户的密码,这样很不安全。
    2. Google不得不部署密码登录,而我们知道,单纯的密码登录并不安全。
    3. "云冲印"拥有了获取用户储存在Google所有资料的权力,用户没法限制"云冲印"获得授权的范围和有效期。
    4. 用户只有修改密码,才能收回赋予"云冲印"的权力。但是这样做,会使得其他所有获得用户授权的第三方应用程序全部失效。
    5. 只要有一个第三方应用程序被破解,就会导致用户密码泄漏,以及所有被密码保护的数据泄漏。

    而 OAuth 2.0 的作用就是为了解决以上的问题。

    3. OAuth 2.0 基础知识

    OAuth 2.0中关键的几个角色。

    • 第三方应用程序:也就是客户端,在上面的例子就是“云冲印”。
    • HTTP 服务提供商:也就是服务提供商,在上面的例子就是“Google”。
    • 资源所有者:也就是用户自身。
    • 认证服务器:是服务提供商提供的用于用户认证的服务器。
    • 资源服务器:是服务提供商所存放用户数据的服务器。

    OAuth 2.0的基本流程如下:
    在这里插入图片描述

    主要分为三大步:

    1. 向用户请求授权
    2. 获取授权后,向认证服务器请求token。
    3. 使用token访问用户数据。

    4. OAuth 2.0 授权模式介绍

    4.1 授权码模式

    授权码模式基本流程如下:
    在这里插入图片描述

    4.2 密码模式

    密码模式基本流程如下:
    在这里插入图片描述

    4.3 简化模式

    简单来说,简化模式就是授权码的简化版,简化了授权码的部分,直接返回的是token。

    4.4 客户端模式

    客户端模式里没有用户的概念。是客户端以自己的名义向认证服务器申请token。

    客户端只需将客户端id和密码给认证服务器,认证服务器就会确认后发放token。

    简单来说,客户端模式就是密码模式的简化版,简化了用户的账号密码部分,直接使用客户端申请授权。

    关注我的微信公众号,查看更多文章,第一时间收到我的文章。

    欢迎关注我的微信公众号:lxiao学习日记

    参考文章:理解OAuth 2.0 - 阮一峰

    展开全文
  • OAuth2.0

    2018-11-15 18:03:14
    目录1、引言2、OAuth2.0是什么3、OAuth2.0怎么写1、引言 本篇文章是介绍OAuth2.0中最经典最常用的一种授权模式:授权码模式 非常简单的一件事情,网上一堆神乎其神的讲解,让我不得不写一篇文章来终结它们。 一项...
  • Oauth 2.0

    2017-08-03 11:55:43
    OAuth 2.0
  • oauth2.0授权码 OAuth 2.0提供了许多安全流程(或授权类型),以允许一个应用程序访问另一个应用程序中的用户数据。 在此博客中,我们将介绍OAuth 2.0授权:授权代码授权。 首先,有许多定义: 客户端 :...
  • oAuth 2.0

    2020-11-08 23:05:00
    OAuth 2.0 OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据。 简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的...
  • 在《OAuth2.0协议入门(一):OAuth2.0协议的基本概念以及使用授权码模式(authorization code)实现百度账号登录》中,介绍了OAuth2.0协议的基本概念以及作为一个第三方应用在请求授权服务端的时候需要做哪些事情。...
  • 深入理解基于OAuth2.0&amp;amp;第三方登录之GitHub实践基于OAuth2.0的第三方登录第三方登录的实质几个重要概念为什么需要加入第三方登录OAuth2.0协议规范流程最典型的Authorization Code 授权模式为何引入...
  • oauth2.0协议流程 什么是OAuth 2.0 OAuth 2.0是一个已被广泛采用的委托授权框架,已经存在了很多年,并且似乎已经存在。 如果您不熟悉OAuth 2.0的基本概念,可以使用 川崎孝彦写的优秀文章 。 这只是OAuth 2.0各方...
  • Oauth2.0本身: Oauth2.0是一种授权协议,当然也归属为安全协议的范畴,在实际执行的时候就是保护互联网中不断增长的大量WEB API的安全访问。OAuth2.0共包含四种角色,分别是资源所有者、第三方应用(也称为客户端...
  • 1.架构图 技术团队通过一段时间的积累后,我们打算对往后的一些新项目采用Spring Cloud技术栈来实现。大概微服务的架构如下: ...Zuul网关集群 各模块微服务集群 Nginx实现负载均衡 Spring Cloud Config 统一配置...
  • OAuth2.0授权模式 OAuth2.0支持如下四种授权模式,其中安全级别最高的是授权码模式。我们先了解一下在代码中如何简单的实现四种授权模式,下一篇在介绍关于四种授权模式的选型。 授权码 密码式 隐藏式 客户端...
  • 最近因为公司的一个单点登录的需求,需要用到OAuth2.0协议,所以研究了一下OAuth2.0协议。  OAuth2.0十一中用于用户身份认证和授权的协议。 下面是摘自百度百科,供参考: OAuth is a security protocol that ...
  • 写个OAuth2.0的请求端来测试自己的OAuth2.0服务端(二) 原文:写个OAuth2.0的请求端来测试自己的OAuth2.0服务端(二)在上一篇文章中,我们介绍了怎么创建自己的服务器,现在我们开始写个client端,来...
  • 前言从事互联网开发的同学们应该或多或少听说过 OAuth2.0 协议,例如使用微信或支付宝账户登录第三方App,这是 OAuth2.0 最为开发人员所熟知的一个用途,但是围绕着 OAuth2.0 协议其实还有很多有意思的内容可以挖掘...

空空如也

1 2 3 4 5 ... 20
收藏数 11,904
精华内容 4,761
关键字:

oauth2.0