Spring Security + OAuth2 - 黑马程序员(4. OAuth 的四种模式)学习笔记

上一篇:Spring Security + OAuth2(3. 服务器配置)

下一篇:Spring Security + OAuth2(5. 资源服务搭建与测试)

  • OAuth 一共提供了四种模式,也就是在上一节如图的位置配置的信息
    在这里插入图片描述
  • 分别是:
  1. 授权码模式 —— authorization_code
  2. 简化模式 —— implicit
  3. 密码模式 —— password
  4. 客户端模式 —— client_credentials
  • 下面就对其进行一一的配置与测试

1. 授权码模式

  • 下图是授权码模式交互图:
    在这里插入图片描述

说明:

  1. 资源拥有者打开客户端,客户端要求资源拥有者给予授权,它将浏览器被重定向到授权服务器,重定向时会 附加客户端的身份信息。如:

    /uaa/oauth/authorize?client_id=c1&response_type=code&scope=all&redirect_uri=http://www.baidu.com

    参数列表如下:

    1. client_id:客户端准入标识。
    2. response_type:授权码模式固定为code。
    3. scope:客户端权限。
    4. redirect_uri:跳转uri,当授权码申请成功后会跳转到此地址,并在后边带上code参数(授权码)。
  2. 浏览器出现向授权服务器授权页面,之后将用户同意授权。

  3. 授权服务器将授权码(AuthorizationCode)转经浏览器发送给client(通过redirect_uri)。

  4. 客户端拿着授权码向授权服务器索要访问access_token,请求如下:

    /uaa/oauth/token? client_id=c1&client_secret=secret&grant_type=authorization_code&code=5PgfcD&redirect_uri=http://w ww.baidu.com

    参数列表如下

    1. client_id:客户端准入标识。
    2. client_secret:客户端秘钥。
    3. grant_type:授权类型,填写authorization_code,表示授权码模式
    4. code:授权码,就是刚刚获取的授权码,注意:授权码只使用一次就无效了,需要重新申请。
    5. redirect_uri:申请授权码时的跳转url,一定和申请授权码时用的redirect_uri一致。
  5. 授权服务器返回令牌(access_token)

  • 这种模式是四种模式中 最安全 的一种模式。一般用于client是Web服务器端应用或第三方的原生App调用资源服务 的时候。因为在这种模式中access_token不会经过浏览器或移动端的App,而是直接从服务端去交换,这样就最大 限度的减小了令牌泄漏的风险

2. 简化模式

  • 下图是简化模式交互图:

在这里插入图片描述
简单说明:

  1. 资源拥有者打开客户端,客户端要求资源拥有者给予授权,它将浏览器被重定向到授权服务器,重定向时会 附加客户端的身份信息。如:

    /uaa/oauth/authorize?client_id=c1&response_type=token&scope=all&redirect_uri=http://www.baidu.com

    参数描述同授权码模式 ,注意response_type=token,说明是简化模式。

  2. 浏览器出现向授权服务器授权页面,之后将用户同意授权。

  3. 授权服务器将授权码将令牌(access_token)以Hash的形式存放在重定向uri的fargment中发送给浏览 器。

    注:fragment 主要是用来标识 URI 所标识资源里的某个资源,在 URI 的末尾通过 (#)作为 fragment 的开头, 其中 # 不属于 fragment 的值。如https://domain/index#L18这个 URI 中 L18 就是 fragment 的值。大家只需要 知道js通过响应浏览器地址栏变化的方式能获取到fragment 就行了。

    一般来说,简化模式用于没有服务器端的第三方单页面应用,因为没有服务器端就无法接收授权码。

3. 密码模式

  • 下图是密码模式交互图:
    在这里插入图片描述
    简单说明:
  1. 资源拥有者将用户名、密码发送给客户端

  2. 客户端拿着资源拥有者的用户名、密码向授权服务器请求令牌(access_token),请求如下:

    /uaa/oauth/token? client_id=c1&client_secret=secret&grant_type=password&username=shangsan&password=123

    参数列表如下:

    1. client_id:客户端准入标识。
    2. client_secret:客户端秘钥。
    3. grant_type:授权类型,填写password表示密码模式 username:资源拥有者用户名。
    4. password:资源拥有者密码。
  3. 授权服务器将令牌(access_token)发送给client

这种模式十分简单,但是却意味着直接将用户敏感信息泄漏给了client,因此这就说明这种模式只能用于client是我 们自己开发的情况下。因此密码模式一般用于我们自己开发的,第一方原生App或第一方单页面应用。

4. 客户端模式

  • 客户端模式介绍
    在这里插入图片描述
  1. 客户端向授权服务器发送自己的身份信息,并请求令牌(access_token)

  2. 确认客户端身份无误后,将令牌(access_token)发送给client,请求如下:

    /uaa/oauth/token?client_id=c1&client_secret=secret&grant_type=client_credentials

    参数列表如下:

    1. client_id:客户端准入标识。
    2. client_secret:客户端秘钥。
    3. grant_type:授权类型,填写client_credentials表示客户端模式 这种模式是最方便但最不安全的模式。因此这就要求我们对client完全的信任,而client本身也是安全的。因此这种模式一般用来提供给我们完全信任的服务器端服务。比如,合作方系统对接,拉取一组用户信息。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
spring-security-oauth2-2.2.3.release.jar是一个用于实现基于OAuth 2.0协议的安全认证和授权的Java库。OAuth 2.0协议是一种用于授权的开放标准,它允许用户通过授权代理向第三方应用程序授权访问受保护的资源,而无需将用户的凭证(例如用户名和密)透露给第三方。 spring-security-oauth2-2.2.3.release.jar提供了一套面向Spring应用程序的OAuth 2.0认证和授权解决方案。它可以轻松地将OAuth 2.0集成到现有的Spring应用程序中,并提供了一系列的API和类,使开发人员可以方便地实现OAuth 2.0认证和授权流程。 使用spring-security-oauth2-2.2.3.release.jar,开发人员可以通过配置和自定义一些核心组件(例如TokenStore、AuthorizationServer和ResourceServer)来实现OAuth 2.0的四种授权类型:授权模式、密模式、客户端模式和简化模式。通过这些授权类型,开发人员可以实现不同的应用场景和需求。 此外,spring-security-oauth2-2.2.3.release.jar支持使用不同的存储机制来存储和管理OAuth 2.0令牌,例如内存存储、数据库存储和Redis存储。开发人员可以根据自己的需求选择并配置合适的存储机制。 总的来说,spring-security-oauth2-2.2.3.release.jar提供了一种简单、可扩展且安全的方式来实现OAuth 2.0认证和授权。无论您是开发面向Web、移动还是其他类型应用程序,该库都能帮助您轻松地实现与第三方应用程序的安全集成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuan_404

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值