Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

现在可以访问我们的认证服务器,应用我们已经配置好了。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
下面配置让用户可以访问我的认证服务器。再来重写一个方法。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

EndpointConfigure端点的配置。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
authenticationManager用来校验,我们传进来的用户信息是不是合法的
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
authenticationManager那么它从哪来呢?注入进来。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
单独写一个类来配置。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
继承这个类 WebSecurityConfigurerAdapter, 这是web应用的安全配置的适配器。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

同样在上面要写两个注解,@EnableWebSecurity让安全配置生效。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

在这里就是要配置AuthenticationManager,让认证服务器知道用AuthenticationManager识别我的用户,是否是有效的用户。重写覆盖相应的方法。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
参数是AuthenticationManagerBuilder它就是用来帮我们构建 AuthenticationManager的
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
要构建AuthenticationManager 需要两个东西,第一是userDetailService
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
注入进来。这些都是SpringSecurity里面定义的接口。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
来看下UserDetailsService
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
里面只有一个方法叫做loadUserByUserName。这个方法的作用就是通过用户名来获取详细的用户信息。一般情况下这个接口的实现类需要我们自己去写。在实现类里面通过去查询数据库拿着这个用户名。查出相关的用户信息来。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

如果查不到用户,就抛出UsernameNotFundException
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
查询的用户信息封装到一个对象里面。这个对象需要实现 UserDetails接口。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

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

passwordEncoder直接声明了. 下面直接调用这个方法。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
注意这里只是配置了AuthenticationManager,怎么来组装AuthenticationManager 并没有暴露成一个Spring的Bean。还需要再写一步,覆盖掉authenticationManangerBean这个方法

Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
这个方法就是专门用来给你暴露AuthenticationManager 的
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

可以看一下源码,用了一个委托,传了一个authenticationBuilder过去。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

参数builder是我们在这里配置的
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
这样我们在认证服务里面注入的 AuthenticationManager就是我刚才暴露出来的Bean
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
同样的注入的passwordEncoder也是这里配置的。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
还缺一个组件就是这个UserDetailsService
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

创建UserDetailsService

Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
userDetialsSercice是用来根据用户名获取用户的详细信息的

Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
继承UserDetailsService的接口。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
加上注解@Component
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
理论上这里应该是要去读取数据库的,这里我们为了简单的演示,先把用户的信息写死,。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
为了方便我们写代码,Spring也提供了一些工具类。它来帮助我们构建用户信息
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
UserDetails是一个接口,它用来封装Spring Security所需要的用户信息。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

withUserName的返回是是一个UserBuilder
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
真正的业务场景下,这里一定是要读数据库的。数据库里面 拿出来的密码一定是密文的。所以这里把密码加密后设置到这个密码里。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
这个人拥有的权限,可以理解为一种角色。这就是构建用户所必需的的三个属性。用户名、密码、权限、

Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
三个都设置好后,调用build方法。他就会用这些信息构建出用户信息返回回去。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
我们在做测试的时候,用户名是什么无所谓,。但是密码一定要是 123456
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
这里是合法的应用信息
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

最后一个配置

最后一个问题订单服务去找认证服务,验证令牌。认证服务器这里需要做一个配置。就是谁能找我验这个令牌。或者说验这个令牌 需要什么样的条件。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

重写AuthorizationServerSecurityConfigurer的配置
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
用来检查token的这个服务的访问规则,
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
这里我们直接写一个权限表达式。表示验证token 一定是要带着身份认证的,也就是带着用户名和密码
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
用户名要是oderApp 面是123456 或者 用户名是orderService密码是123456。必须要带着些信息来验证你的token,我才给你验。如果你随便发一个请求来验证token,不能验。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

启动测试

启动认证服务
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

获取token发post请求
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
同时要携带一些信息。用httpBasic传递,哪个应用要申请令牌。这样他就知道是orderApp这各应用去申请令牌。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

再加一个授权类型,这个接口上支持四中授权类型
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
scope我希望在这个令牌里面包含什么样的权限。希望这个令牌里 包含读写的权限。注意这里用空格隔开,
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
可以写的单词一定是在scopes这里声明过的单词。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
fly是scopes里面没有声明过的
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

如果密码故意写错
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
无效的授权。 错误的证书。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器

如果basic的信息传错了。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
就会要求你重新填这个用户名密码。 一定要填正确了 才可以。
Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
这就是用password这种方式,申请令牌的标准的请求,。

结束

上一篇:Spring cloud微服务安全实战-4-6搭建OAuth2资源服务器


下一篇:【转】Android Camera(五)使用Camera功能 AREA的理解