这篇文章运用简单易懂的例子给大家介绍使用春云oauth2实现用户认证登录,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
<强> OAuth3 强>
OAuth3是一个关于授权的网络标准,他定制了设计思路和执行流程.OAuth3一共有四种授权模式:授权码模式(授权代码),简化模式(隐性),密码模式(资源所有者密码)和客户端模式(客户端凭据)。数据的所有者告诉系统同意授权第三方应用进入系统,获取这些数据。于是数据所有者生产了一个短时间内有效的授权码(令牌)给第三方应用,用来代替密码,供第三方使用。具体流程请看下图,具体的OAuth3介绍,可以参考这篇文章,写的很详细。(https://www.jb51.net/article/198292.htm)
令牌(令牌)和密码(密码)的作用是一样的,都可以进入系统获取资源,但是也有几点不同:
- <李>令牌是短期的,到期会自动失效,用户无法修改。密码是长期的,用户可以修改,如果不修改,就不会发生变化。李> <>李令牌可以被数据所有者撤销,令牌会立即失效。密码一般不允许其他人撤销,只能被操作权限更高的人或者本人修改/重制。李> <李>令牌是有权限范围的,会被数据所有者授予。李>
本篇介绍的是通过密码模式来实现单点登录的功能。
, # 8203;在微服务架构中,我们的一个应用可能会有很多个服务运行,协调来处理实际的业务。这就需要用到单点登录的技术,来统一认证调取接口的是哪个用户。那总不能请求一次,就认证一次,这么做肯定是不行的。那么就需要在认证完用户之后,给这个用户授权,然后发一个令牌(令牌),有效期内用户请求资源时,就只需要带上这个标识自己身份的令牌即可。
<>强架构说明强>
认证中心:oauth3-oauth-server, OAuth3的服务端,主要完成用户令牌的生成,刷新,验证等。
微服务:mzh-etl,微服务之一,接收到请求之后回到认证中心(oauth3-oauth-server)去验证。
使用到的框架是java基础的弹簧引导和spring-cloud-oauth3
<>强认证中心:强>
1,引入需要的maven包
& lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-web & lt;/dependency> & lt; dependency> & lt; groupId> org.springframework.cloud & lt; artifactId> spring-cloud-starter-oauth3 & lt;/dependency> & lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-data-redis & lt;/dependency> & lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-actuator & lt;/dependency>
因为spring-cloud-starter-oauth3中包含了spring-cloud-starter-security,所以就不用再单独引入了,引入复述,包是为了使用复述来存储牌。
2,配置应用程序。yml
这里主要用到的是复述的配置,mysql数据库的配置暂时没有用的到。
春: 应用程序: 名称:oauth-server 数据源: url: jdbc: mysql://localhost: 3306/mzh_oauth& # 63; useSSL=false& characterEncoding=utf - 8 用户名:根 密码:admin123 driver-class-name: com.mysql.jdbc.Driver hikari: 连接超时:30000 闲置超时:600000 max-lifetime: 1800000 最大池大小:9 复述: 数据库:0 主持人:localhost 端口:6379 能: 池: max-active: 8 最大空闲:8 min-idle: 0 超时:10000 服务器: 端口:8888 use-forward-headers:真 管理: 端点: 健康: 启用:真
3, spring security权限配置
需要继承WebSecurityConfigurerAdapter
/* * * @Author mzh * @Date 2020/10/24 */@ configuration @EnableWebSecurity @EnableGlobalMethodSecurity (prePostEnabled=true) 公开课WebSecurityConfig延伸WebSecurityConfigurerAdapter { @ autowired 私人CustomUserDetailsService CustomUserDetailsService;/* * *修改密码的加密方式 * @return */@ bean 公共PasswordEncoder PasswordEncoder () { 返回新BCryptPasswordEncoder (); } @ bean @Override 公共AuthenticationManager authenticationManagerBean()抛出异常{ 返回super.authenticationManagerBean (); } @Override 保护无效配置(AuthenticationManagerBuilder auth)抛出异常{//如果使用BCryptPasswordEncoder,这里就必须指定密码的加密类 auth.userDetailsService (customUserDetailsService) .passwordEncoder (passwordEncoder ()); } @Override 保护无效配置(HttpSecurity http){抛出异常 http.authorizeRequests () .antMatchers (“/oauth/* *“) .permitAll (); } }使用春云oauth2实现用户认证登录