密码模式

前面介绍了授权码模式和刷新令牌两种获取最新令牌的方法,下面来看一下其它模式。首先看密码模式,我们默认配置的三种模式中其实就包含密码模式的支持:

因此我们启动项目,直接使用密码模式即可,访问地址是:

参数有五个,分别是:

  • grant_type:密码模式值必须为 password

  • username:用户名

  • password:密码

  • client_id:客户端id

  • client_secret:客户端秘钥

访问示例如下:

密码模式适用于用户高度信任的情况,只有高度信息才能传用户名密码,谨慎使用。

隐藏模式

有些web应用是纯前端的应用,需要允许授权服务直接向前端颁发令牌。这种方式没有授权码这个中间步骤,所以称为(授权码)"隐藏式"(implicit)。访问链接示例如下:

可以看到这种方式比授权码模式多了一个scope参数,在使用隐藏模式之前,需要授权服务支持隐藏模式,就需要在授权类型中加上 implicit:

然后将上面的链接输入到浏览器,会出现登录页面,登录成功后,链接中会直接出现令牌:

注意,令牌的位置是 URL 锚点(fragment),而不是查询字符串(querystring),这是因为 OAuth 2.0 允许跳转网址是 HTTP 协议,因此存在"中间人攻击"的风险,而浏览器跳转时,锚点不会发到服务器,就减少了泄漏令牌的风险。

凭证模式

最后一种方式是凭证式(client credentials),适用于没有前端的命令行应用,即在命令行下请求令牌。请求地址如下:

请求前,先在授权类型中配置凭证模式:

请求结果示例:

这种方式给出的令牌,是针对第三方应用的,而不是针对用户的,即有可能多个用户共享同一个令牌。

代码地址: https://gitee.com/blueses/spring-boot-security 28

本文由博客一文多发平台 OpenWrite 发布!

SpringBootSecurity学习(23)前后端分离版之OAuth2.0 其它模式的更多相关文章

  1. SpringBootSecurity学习(15)前后端分离版之 OAuth2.0简单示例

    OAuth2.0 OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者.客户端来申请资源,资源所有者同意以后,资源服务器可以向客户端颁发令牌.客户端通过令牌,去请求数据.也就是说, ...

  2. SpringBootSecurity学习(14)前后端分离版之 OAuth2.0介绍

    登录总结 前面基本介绍了security的常规用法,同时介绍了JWT和它的一个简单实现,基本上开发中遇到的登录问题都能解决了,即使在分布式开发,或者微服务开发中实现登录也基本没有问题了.securit ...

  3. SpringBootSecurity学习(16)前后端分离版之 OAuth2.0 加密配置

    示例代码的改进 前面使用spring cloud security和spring cloud oauth2写了一个第三方授权的例子,例子非常的简单,主要目的是用来熟悉OAuth2.0 申请授权的整个流 ...

  4. SpringBootSecurity学习(19)前后端分离版之OAuth2.0 token的存储和管理

    内存中存储token 我们来继续授权服务代码的下一个优化.现在授权服务中,token的存储是存储在内存中的,我们使用的是 InMemoryTokenStore : 图中的tokenStore方法支持很 ...

  5. SpringBootSecurity学习(17)前后端分离版之 OAuth2.0 数据库(JDBC)存储客户端

    自动批准授权码 前面我们授权的流程中,第一步获取授权码的时候,都会经历一个授权是否同意页面: 这个流程就像第三方登录成功后,提问是否允许获取昵称和头像信息的页面一样,这个过程其实是可以自动同意的,需要 ...

  6. SpringBootSecurity学习(20)前后端分离版之OAuth2.0刷新token

    刷新token 前面的例子和配置都是从头开始申请授权码和令牌,现在来看一下如何根据获取令牌时,回参中的 refresh_token 来刷新令牌.现在在项目中配置的是内存模式的默认用户名密码,第一步先改 ...

  7. SpringBootSecurity学习(21)前后端分离版之OAuth2.0非对称加密

    JWT转换器 前面的例子中,都是在授权服务配置类中配置了一个很简单的jwt转换器,如下: 可以看到我们只用setSigningKey方法配置了一个秘钥,这里使用的是简单的对称加密的方式来加密jwt内容 ...

  8. SpringBootSecurity学习(22)前后端分离版之OAuth2.0自定义授权码

    使用JDBC维护授权码 前面的代码中,测试流程第一步都是获取授权码,然后再携带授权码去申请令牌,授权码示例如下: 产生的授权码默认是 6 位的,产生以后并没有做任何管理,可以说是一个临时性的授权码,o ...

  9. SpringBootSecurity学习(24)前后端分离版之OAuth2.0 应用登记

    应用登记 一个应用要求 OAuth 授权,必须先到对方网站登记,让对方知道是谁在请求.举个例子,下面是github的登记页面: https://github.com/settings/applicat ...

随机推荐

  1. 3. Sentinel源码分析— QPS流量控制是如何实现的?

    Sentinel源码解析系列: 1.Sentinel源码分析-FlowRuleManager加载规则做了什么? 2. Sentinel源码分析-Sentinel是如何进行流量统计的? 上回我们用基于并 ...

  2. 为什么医疗行业需要API市场?

    医疗健康行业无论在国内外都是采用先进技术的先驱者之一,原因在于业内的利益相关者会更加接近数据.重视数据的重要性,从而加快在决策上面的动作,以期更好的患者的预期寿命和增进社会人口的健康.更重要的是,数据 ...

  3. Request请求的应用

    1.通过request获得请求行 获得客户端的请求方式:String getMethod() 获得请求的资源: String getRequestURI()   StringBuffer getReq ...

  4. RodRego — a register machine

    RodRego - a register machine 寄存器机(register machine)是一种类似于图灵机一样的抽象机器,是计算机模型的一种,他和其他的抽象机一样都是图灵等价的. Rod ...

  5. 爬虫 之 requests

    Requests 安装pip install requests 官方设计原则:让HTTP服务于人类 一.常用方法 import requests url = "http://www.http ...

  6. Redis 的底层数据结构(SDS和链表)

    Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.可能几乎所有的线上项目都会使用到 Redis,无论你是做缓存.或是用作消息中间件,用起来很简单方便 ...

  7. 1.mssql和mysql sql如何调优?

    mssql是指微软的SQL Server数据库服务器. mssql常见的调优方法主要分为两类, (1)代码优化,代码优化,我搜集常用到的有以下几点: 1.避免使用select *  语句 2.避免关联 ...

  8. spring boot整合kafka

    最近项目需求用到了kafka信息中间件,在此做一次简单的记录,方便以后其它项目用到. 引入依赖 <dependency> <groupId>org.springframewor ...

  9. Scrapy高级用法

    日志相关 一.日志相关变量 LOG_LEVEL = '' LOG_FILE = '文件名.log' 二.日志级别 5 CRITICAL :严重错误 4 ERROR :普通错误 3 WARNING :警 ...

  10. pip版本降级

    使用命令:python -m pip install pip==8.1.1 其中, -m参数的解释 run library module as a script (terminates option ...