Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OAuth2.0实战案例(二)搭建认证服务,就是这个服务里面就是来颁发token

OAuth2.0实战案例(二)搭建认证服务,就是这个服务里面就是来颁发token

作者头像
一写代码就开心
发布于 2020-11-20 06:23:26
发布于 2020-11-20 06:23:26
1.2K00
代码可运行
举报
文章被收录于专栏:java和pythonjava和python
运行总次数:0
代码可运行

我们的整个项目就是B系统,之前已经创建了资源服务,意思是以后想要访问资源服务里面的东西,要被OAuth2.0管理。

既然已经有了资源服务,并且这个资源服务是被OAuth2.0管理的。现在就需要一个认证的服务,这个认证服务的作用就是颁发token给A系统,A系统只要访问了这个认证服务,就会得到一个token,之后拿上这个token,就可以访问资源服务了。

认证服务的创建

1 导入依赖 2 写yml配置

3 认证的配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserService userService;

    @Bean
    public BCryptPasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userService).passwordEncoder(passwordEncoder());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginProcessingUrl("/login")
                .permitAll()
                .and()
                .csrf()
                .disable();
    }

    //AuthenticationManager对象在OAuth2认证服务中要使用,提前放入IOC容器中
    @Override
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

写我们之前自定义的认证的配置,但是现在要OAuth2.0进行认证,所以还需要添加一个新的配置 这个就是配置授权的方式,现在使用了授权码模式进行授权的配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //AuthenticationManager对象在OAuth2认证服务中要使用,提前放入IOC容器中
    @Override
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

之前写的是web的配置,也就是登录的配置,但是还有一个OAuth2.0颁发token的配置,重新写一个配置,这个配置就是认证服务器里面用OAuth2.0颁发token的配置

只要写了这个注解,并且继承了这个,那么这个自己写的类就是OAuth2.0的配置类了 之后就是重写里面的方法,开始在重写的方法里面颁发token

里面写什么? 1 数据库连接池对象 因为和OAuth2.0相关的表都在数据库里面,所以配置里面就需要引入数据源 2 认证业务对象 //认证业务对象 @Autowired private UserService userService; 写了这个就是不仅仅让用户可以直接登录这个服务,也就是单点登录,而且还可以用OAuth2.0进行认证 3授权模式专用对象

//授权模式专用对象 @Autowired private AuthenticationManager authenticationManager; 之前我们在web配置里面配置了这个授权码的配置,现在就是从哪个里面拿过来用

4//客户端信息来源 //客户端信息来源 @Bean public JdbcClientDetailsService jdbcClientDetailsService(){ return new JdbcClientDetailsService(dataSource); } A系统要有B系统的使用权,A系统要注册到这个B系统,也就是A系统的信息要在B系统里面保存,所以在认证的服务器里面要配置这个信息的来源 5//token保存策略 虽然这个认证的服务是颁发token,但是还要将生成的token保存在数据库,所以要配置一个保存策略 6//授权信息保存策略 B系统给了A系统的什么权限,这个是需要保存在B系统里面的,这个保存的模式是什么,所以需要我们定义

7授权码模式数据来源

以上的这7个只是我们需要用的对象,之后开始使用这些对象进行配置

重写人家的方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //指定客户端信息的数据库来源
    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.withClientDetails(jdbcClientDetailsService());
    }

    //检查token的策略
    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security.allowFormAuthenticationForClients();
        security.checkTokenAccess("isAuthenticated()");
    }

    //OAuth2的主配置信息,整合上面的所有的配置
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints
                .approvalStore(approvalStore())
                .authenticationManager(authenticationManager)
                .authorizationCodeServices(authorizationCodeServices())
                .tokenStore(tokenStore());
    }

OAuth2.0的所有的配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
@EnableAuthorizationServer
public class OauthServerConfig extends AuthorizationServerConfigurerAdapter {

    //数据库连接池对象
    @Autowired
    private DataSource dataSource;

    //认证业务对象
    @Autowired
    private UserService userService;

    //授权模式专用对象
    @Autowired
    private AuthenticationManager authenticationManager;

    //客户端信息来源
    @Bean
    public JdbcClientDetailsService jdbcClientDetailsService(){
        return new JdbcClientDetailsService(dataSource);
    }

    //token保存策略
    @Bean
    public TokenStore tokenStore(){
        return new JdbcTokenStore(dataSource);
    }

    //授权信息保存策略
    @Bean
    public ApprovalStore approvalStore(){
        return new JdbcApprovalStore(dataSource);
    }

    //授权码模式数据来源
    @Bean
    public AuthorizationCodeServices authorizationCodeServices(){
        return new JdbcAuthorizationCodeServices(dataSource);
    }

    //指定客户端信息的数据库来源
    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.withClientDetails(jdbcClientDetailsService());
    }

    //检查token的策略
    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security.allowFormAuthenticationForClients();
        security.checkTokenAccess("isAuthenticated()");
    }

    //OAuth2的主配置信息
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints
                .approvalStore(approvalStore())
                .authenticationManager(authenticationManager)
                .authorizationCodeServices(authorizationCodeServices())
                .tokenStore(tokenStore());
    }

以上配置完成之后,那么我们的认证服务就完成了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/10/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
实战:画了几张图,终于把OAuth2搞清楚了
对于身份认证和用户授权,之前写过几篇关于Shiro和Security的文章。从发送口令获取源码的反馈来看,大家还是比较认可的。今天给大家带来一种新的授权方式:oauth2。
阿Q说代码
2023/01/09
1.9K0
实战:画了几张图,终于把OAuth2搞清楚了
Spring Security OAuth2.0实现
OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。
兜兜转转
2023/03/29
3K0
Spring Security OAuth2.0实现
基于Spring Cloud Oauth2 JWT搭建微服务的安全认证中心
Oauth协议为用户资源的授权提供了一个安全的、开放而又建议的标准。oauth的授权不会是第三方初级到用户的账号信息(如用户名与密码),及第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此oauth是安全的。oauth是Open Authorization的简写
小东啊
2019/06/26
15.8K1
基于Spring Cloud Oauth2 JWT搭建微服务的安全认证中心
Spring Security---Oauth2详解
在说明OAuth2需求及使用场景之前,需要先介绍一下OAuth2授权流程中的各种角色:
大忽悠爱学习
2021/12/07
4.9K0
Spring Security---Oauth2详解
Spring Cloud OAuth2 实现用户认证及单点登录
OAuth 2 有四种授权模式,分别是授权码模式(authorization code)、简化模式(implicit)、密码模式(resource owner password credentials)、客户端模式(client credentials),具体 OAuth2 是什么,可以参考这篇文章。(http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html)
古时的风筝
2019/10/24
2.1K0
Spring Cloud OAuth2 实现用户认证及单点登录
配置OAuth2认证服务器和资源服务器-完整示例
在 Spring Boot 项目的 application.yml 或 application.properties 文件中添加 OAuth2 认证服务器的配置:
堕落飞鸟
2023/04/13
1.8K0
使用OAuth2实现授权服务
OAuth 2发明之初是为了解决登录认证过程中的安全性问题,使用“委托”的形式使第三方应用获得数据权限及功能。OAuth 2.0协议中,使用访问令牌ACCESS_TOKEN代替传统的账号密码,提高了互联网环境下的安全性。
关忆北.
2022/09/28
1.5K0
使用OAuth2实现授权服务
SpringCloud Alibaba微服务实战十八 - Oauth2.0 自定义授权模式
那么如何新增一个自定义的授权模式,比如像下面这样根据手机号和短信验证码进行登录呢?
JAVA日知录
2020/07/31
2.6K0
SpringCloud Alibaba微服务实战十八 - Oauth2.0 自定义授权模式
oauth2.0 实现spring cloud nosession
上一篇博客使用自定义jwt实现spring cloud nosession,过程稍微比较复杂,依赖的是我们自己控制token生成、校验。 那么这一篇文章将使用spring cloud 和 spring-security-oauth2 做一个无缝集成,实现nosession,和权限控制。 为了快速的实现目标效果,拓扑结构如上图,我们将采用 InMemory的形式实现,相关换成JDBC实现位置,我会在文章中说明,主要看代码的注释。 auth-server 认证实现 @Configuration @Enab
冷冷
2018/02/08
1.2K0
oauth2.0 实现spring cloud nosession
security和oauth2.0的整合
之前已经介绍过security的相关的介绍,现在所需要做的就是security和oauth2.0的整合,在原有的基础上我们加上一些相关的代码;代码实现如下:
Dream城堡
2018/09/10
1K0
使用Spring Security登录认证,通过Oauth2.0开发第三方授授权访问资源项目详解
OAuth 2.0提供者机制负责公开OAuth 2.0受保护的资源。该配置包括建立可独立或代表用户访问其受保护资源的OAuth 2.0客户端。提供者通过管理和验证用于访问受保护资源的OAuth 2.0令牌来实现。在适用的情况下,提供商还必须提供用户界面,以确认客户端可以被授权访问受保护资源(即确认页面)。
Dream城堡
2020/11/11
3.3K0
使用Spring Security登录认证,通过Oauth2.0开发第三方授授权访问资源项目详解
Springboot 集成OAuth2.0密码模式简单配置
(1)Third-party application:第三方应用程序,简称"客户端"(client);
黑洞代码
2021/01/14
3.8K0
Springboot 集成OAuth2.0密码模式简单配置
Spring Boot Security 整合 OAuth2 设计安全API接口服务
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。本文重点讲解Spring Boot项目对OAuth2进行的实现,如果你对OAuth2不是很了解,你可以先理解 OAuth 2.0 - 阮一峰,这是一篇对于oauth2很好的科普文章。
程序员果果
2019/05/16
1.9K0
Spring Security 系列(2) —— Spring Security OAuth2
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
求和小熊猫
2022/06/30
6.4K0
详细介绍OAuth2.0及实现和SpringSecurity的整合应用
  先说OAuth,OAuth是Open Authorization的简写。   OAuth协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAuth是安全的。 OAuth2.0是OAuth协议的延续版本,但不向前兼容(即完全废止了OAuth1.0)。
用户4919348
2019/12/16
8.2K0
详细介绍OAuth2.0及实现和SpringSecurity的整合应用
Oauth 2.0 详解
1. Oauth2简介 简介 第三方认证技术方案最主要是解决认证协议的通用标准问题,因为要实现跨系统认证,各系统之间要 遵循一定的接口协议。 OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以 使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。 业界提供了OAUTH的多种实现如PHP、JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的 时间,因而OAUTH是简易的。 互联网很多服务如Open A
BUG弄潮儿
2023/02/24
2.2K0
Oauth 2.0 详解
OAuth2.0实战案例(一)搭建资源服务,以后这个服务里面的资源就被OAuth2.0管理了,想要访问资源,必须携带token
因为要用OAuth2.0,所以我们的项目必须是一个分布式的项目,我们还需要将认证的服务和资源的服务分开。我们就重新的创建一个分布式的项目。
一写代码就开心
2020/11/20
1.5K0
OAuth2.0实战案例(一)搭建资源服务,以后这个服务里面的资源就被OAuth2.0管理了,想要访问资源,必须携带token
oauth2.0通过JdbcClientDetailsService从数据库读取相应的配置
oauth2.0通过JdbcClientDetailsService从数据库读取相应的配置 在上一节我们讲述的配置是把授权码存储在redis中,把相应的请求的路径用使用in-memory存储 ,这个是
Dream城堡
2018/09/10
4.1K0
oauth2.0通过JdbcClientDetailsService从数据库读取相应的配置
Spring Cloud Security OAuth2 中实现密码模式
Spring Cloud Security OAuth2是Spring Cloud提供的基于OAuth2协议的安全授权框架,它可以让我们轻松地实现OAuth2的各种授权流程。
堕落飞鸟
2023/04/14
1.3K0
Spring Security 在 Spring Boot 中使用 OAuth2【分布式】
  OAuth(开放授权,Open Authorization)是一个开放标准,为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 OAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 OAuth 是安全的。OAuth 2.0 是 OAuth 协议的延续版本,但不向后兼容 OAuth 1.0 即完全废止了 OAuth 1.0。很多大公司如 Google,Yahoo,Microsoft 等都提供了 OAuth 认证服务,这些都足以说明 OAuth 标准逐渐成为开放资源授权的标准。Oauth 协议目前发展到 2.0 版本,1.0 版本过于复杂,2.0 版本已得到广泛应用。Spring-Security-OAuth2 是对 OAuth2 的一种实现,并且跟 Spring Security 相辅相成,与 Spring Cloud 体系的集成也非常便利,最终使用它实现分布式认证授权解决方案。
Demo_Null
2020/10/30
7.2K0
Spring Security 在 Spring Boot 中使用 OAuth2【分布式】
推荐阅读
相关推荐
实战:画了几张图,终于把OAuth2搞清楚了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验