现在可以访问我们的认证服务器,应用我们已经配置好了。

下面配置让用户可以访问我的认证服务器。再来重写一个方法。

EndpointConfigure端点的配置。

authenticationManager用来校验,我们传进来的用户信息是不是合法的

authenticationManager那么它从哪来呢?注入进来。

单独写一个类来配置。

继承这个类 WebSecurityConfigurerAdapter, 这是web应用的安全配置的适配器。

同样在上面要写两个注解,@EnableWebSecurity让安全配置生效。

在这里就是要配置AuthenticationManager,让认证服务器知道用AuthenticationManager识别我的用户,是否是有效的用户。重写覆盖相应的方法。

参数是AuthenticationManagerBuilder它就是用来帮我们构建 AuthenticationManager的

要构建AuthenticationManager 需要两个东西,第一是userDetailService

注入进来。这些都是SpringSecurity里面定义的接口。

来看下UserDetailsService

里面只有一个方法叫做loadUserByUserName。这个方法的作用就是通过用户名来获取详细的用户信息。一般情况下这个接口的实现类需要我们自己去写。在实现类里面通过去查询数据库拿着这个用户名。查出相关的用户信息来。

如果查不到用户,就抛出UsernameNotFundException

查询的用户信息封装到一个对象里面。这个对象需要实现 UserDetails接口。

下面来看下AuthenticationManager这个接口。

AuthenticationManager这个接口。也只有一个方法

参数Authenticaiton封装的认证的信息。不同的认证方式发的信息不一样。比如说用户名密码的认证就要发用户名和密码,如果是Oauth协议就要发cientId、 ClientSecret。
不同的认证方式会有不同的Authentication接口的实现。
以上两个接口都是Spring Security框架内提供的 ,刚帮我们完成用户的认证的过程。这门课主要讲怎么去用这个东西,怎么组合起来去解决实际应用中的问题。如果想要了解底层原理 可以去看另外一门课。

passwordEncoder直接声明了. 下面直接调用这个方法。

注意这里只是配置了AuthenticationManager,怎么来组装AuthenticationManager 并没有暴露成一个Spring的Bean。还需要再写一步,覆盖掉authenticationManangerBean这个方法


这个方法就是专门用来给你暴露AuthenticationManager 的

可以看一下源码,用了一个委托,传了一个authenticationBuilder过去。

参数builder是我们在这里配置的

这样我们在认证服务里面注入的 AuthenticationManager就是我刚才暴露出来的Bean

同样的注入的passwordEncoder也是这里配置的。

还缺一个组件就是这个UserDetailsService

创建UserDetailsService


userDetialsSercice是用来根据用户名获取用户的详细信息的


继承UserDetailsService的接口。

加上注解@Component

理论上这里应该是要去读取数据库的,这里我们为了简单的演示,先把用户的信息写死,。

为了方便我们写代码,Spring也提供了一些工具类。它来帮助我们构建用户信息

UserDetails是一个接口,它用来封装Spring Security所需要的用户信息。

withUserName的返回是是一个UserBuilder


真正的业务场景下,这里一定是要读数据库的。数据库里面 拿出来的密码一定是密文的。所以这里把密码加密后设置到这个密码里。

这个人拥有的权限,可以理解为一种角色。这就是构建用户所必需的的三个属性。用户名、密码、权限、


三个都设置好后,调用build方法。他就会用这些信息构建出用户信息返回回去。

我们在做测试的时候,用户名是什么无所谓,。但是密码一定要是 123456

这里是合法的应用信息

最后一个配置

最后一个问题订单服务去找认证服务,验证令牌。认证服务器这里需要做一个配置。就是谁能找我验这个令牌。或者说验这个令牌 需要什么样的条件。

重写AuthorizationServerSecurityConfigurer的配置

用来检查token的这个服务的访问规则,

这里我们直接写一个权限表达式。表示验证token 一定是要带着身份认证的,也就是带着用户名和密码

用户名要是oderApp 面是123456 或者 用户名是orderService密码是123456。必须要带着些信息来验证你的token,我才给你验。如果你随便发一个请求来验证token,不能验。

启动测试

启动认证服务

获取token发post请求

同时要携带一些信息。用httpBasic传递,哪个应用要申请令牌。这样他就知道是orderApp这各应用去申请令牌。

再加一个授权类型,这个接口上支持四中授权类型


scope我希望在这个令牌里面包含什么样的权限。希望这个令牌里 包含读写的权限。注意这里用空格隔开,

可以写的单词一定是在scopes这里声明过的单词。


fly是scopes里面没有声明过的

如果密码故意写错

无效的授权。 错误的证书。

如果basic的信息传错了。

就会要求你重新填这个用户名密码。 一定要填正确了 才可以。

这就是用password这种方式,申请令牌的标准的请求,。

结束

Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器的更多相关文章

  1. Spring cloud微服务安全实战-7-3prometheus环境搭建

    Prmetheus 主要用来做来Metrics的监控和报警,这张图是官方的架构图. 这是他的核心 它的作用是根据我们的配置去完成数据的采集.服务的发现,以及数据的存储. 这是服务的发现,通过Servi ...

  2. Spring cloud微服务安全实战-5-6实现授权码认证流程(2)

    授权服务器,返回给我一个授权码,这里我只需要把授权传回去就可以了.来证明我是这个服务器. URI的地址传和第一次的地址一样的,认证服务器会比,第一次跳转的请求和第二次申请令牌的请求redirect_u ...

  3. Spring Cloud微服务安全实战_3-4_API安全机制之认证

     认证:登录和认证是 两个概念,比如你两周.一个月,可能只登录了一次,但认证却是每次访问都要经过的步骤. 对于图中的认证不成功,也要继续处理,这个我觉得得看业务,比如管理系统,不登录就不让你访问,但对 ...

  4. Spring cloud微服务安全实战-5-5实现授权码认证流程(1)

    目前为止已经完成了完整的用户逻辑 目前的问题是,用户在登陆的时候,用户名提交的是给前端服务器的.每个前端服务器的开发人员都可能接触到前端的用户名密码. 每一个客户端应用都要去处理登陆的逻辑,一单我的登 ...

  5. Spring Cloud微服务安全实战_00_前言

    一.前言: 一直以来对服务安全都很感兴趣,所以就学习.这是学习immoc的 jojo老师的 <Spring Cloud微服务安全实战课程>的笔记,讲的很好. 课程简介:  二.最终形成的架 ...

  6. Spring cloud微服务安全实战_汇总

    Spring cloud微服务安全实战 https://coding.imooc.com/class/chapter/379.html#Anchor Spring Cloud微服务安全实战-1-1 课 ...

  7. 《Spring Cloud微服务 入门 实战与进阶》

    很少在周末发文,还是由于昨晚刚收到实体书,还是耐不住性子马上发文了. 一年前,耗时半年多的时间,写出了我的第一本书<Spring Cloud微服务-全栈技术与案例解析>. 时至今日,一年的 ...

  8. Spring Cloud微服务安全实战_4-5_搭建OAuth2资源服务器

    上一篇搭建了一个OAuth2认证服务器,可以生成token,这篇来改造下之前的订单微服务,使其能够认这个token令牌. 本篇针对订单服务要做三件事: 1,要让他知道自己是资源服务器,他知道这件事后, ...

  9. Spring cloud微服务安全实战 最新完整教程

    课程资料获取链接:点击这里 采用流行的微服务架构开发,应用程序访问安全将会面临更多更复杂的挑战,尤其是开发者最关心的三大问题:认证授权.可用性.可视化.本课程从简单的API安全入手,过渡到复杂的微服务 ...

  10. Spring cloud微服务安全实战-6-3JWT改造之网关和服务改造

    网关上认证去做哪些改造 在网关上用jwt去解析用户信息,而不再发送校验令牌的请求了. 之前的时候网关上实际上写了很多的代码 包括认证,发check_token去把token请求,换成用户信息. 这俩是 ...

随机推荐

  1. stm32自带的flash分布图

    缘由是要用到flash来保存数据,因此查阅了数据手册与参考手册,一般情况下,将要保存的数据存放到比较靠后的地方,page254,page255,4k字节,已经相当多的了,

  2. windows nginx 目录配置

    http { server { listen 80; server_name www.test.com; location / { root E:/data/www; index index.html ...

  3. 域渗透:IPC$ 命名管道

    介绍:IPC$(Internet Process Connection) 是共享 " 命名管道 " 的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接 ...

  4. scanf()函数的调用:编写求正方形面积的通用程序

    #include<stdio.h>void main(){ int a, area; scanf("%d",&a); //等待用户从键盘输入一个整数// are ...

  5. 180908 python 字符串内建函数

    Python 的字符串内建函数 Python 的字符串常用内建函数如下: 序号 方法及描述 1 capitalize()将字符串的第一个字符转换为大写 2 center(width, fillchar ...

  6. Kubernetes 学习10 Service资源

    一.Service对应组件关系 1.在kubernetes平台之上,pod是有生命周期的,所以为了能够给对应的客户端提供一个固定的访问端点,因此我们在客户端和服务Pod之间添加一个固定的中间层,这个中 ...

  7. 014_Python3 循环语句

    1.while 循环 #!/usr/bin/env python3   n = 100   sum = 0 counter = 1 while counter <= n:     sum = s ...

  8. Intel 8086 CPU

    一.8086概述 Intel8086拥有四个16位的通用寄存器,也能够当作八个8位寄存器来存取,以及四个16位索引寄存器(包含了堆栈指标).资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配 ...

  9. noi.ac #45 计数

    \(des\) 给定 \(n\) 的全排列 + 一个值域属于 \([1, n]\) 的元素构成长度为 \(n + 1\) 的序列 问长度为 \(i\) 的本质不同的子序列的个数 \(sol\) 小学计 ...

  10. ora-28000:the account is locked,Oracle修改密码有效期,Oracle设置密码不过期

    查询Oracle用户是否被锁定 --例如我这里是VMCXEDDB 是否被锁定 select username,account_status,lock_date from dba_users where ...