Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Cloud Security OAuth2 中实现密码模式

Spring Cloud Security OAuth2 中实现密码模式

原创
作者头像
堕落飞鸟
发布于 2023-04-13 23:21:47
发布于 2023-04-13 23:21:47
1.3K00
代码可运行
举报
文章被收录于专栏:飞鸟的专栏飞鸟的专栏
运行总次数:0
代码可运行

Spring Cloud Security OAuth2是Spring Cloud提供的基于OAuth2协议的安全授权框架,它可以让我们轻松地实现OAuth2的各种授权流程。

一、前置准备工作

在使用Spring Cloud Security OAuth2实现密码模式授权之前,我们需要进行以下准备工作:

创建Spring Boot项目

在开始之前,我们需要创建一个Spring Boot项目作为基础。我们可以使用Spring Initializr或手动创建一个Spring Boot项目。

添加Spring Cloud Security OAuth2依赖

在项目中添加Spring Cloud Security OAuth2的依赖,以支持OAuth2协议的安全授权功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-oauth2</artifactId>
    <version>2.2.6.RELEASE</version>
</dependency>

配置数据库

在使用Spring Cloud Security OAuth2时,需要配置相应的数据库,用于存储OAuth2的相关信息。这里我们以MySQL数据库为例进行配置。

二、实现密码模式授权

配置认证服务器

在Spring Boot项目中添加配置类OAuth2AuthorizationServerConfig,用于配置认证服务器:

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

    @Autowired
    private AuthenticationManager authenticationManager;

    @Autowired
    private DataSource dataSource;

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.jdbc(dataSource);
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.authenticationManager(authenticationManager);
    }

    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security.allowFormAuthenticationForClients();
    }
}

在上面的配置类中,我们配置了使用数据库存储OAuth2的客户端信息,并配置了认证服务器的端点,同时还配置了允许表单认证。

配置资源服务器

在Spring Boot项目中添加配置类OAuth2ResourceServerConfig,用于配置资源服务器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
@EnableResourceServer
public class OAuth2ResourceServerConfig extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/api/**").authenticated();
    }
}

在上面的配置类中,我们配置了资源服务器的安全策略,只允许访问"/api/**"接口的用户进行授权。

配置安全策略

在Spring Boot项目中添加配置类SecurityConfig,用于配置安全策略::

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

    @Autowired
    private DataSource dataSource;

    @Override
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication()
            .dataSource(dataSource)
            .usersByUsernameQuery("select username, password, enabled from user where username = ?")
            .authoritiesByUsernameQuery("select username, authority from authorities where username = ?");
    }

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

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

在上面的代码中,我们使用了Spring Security提供的JdbcAuthentication,将用户信息存储在MySQL数据库中。同时,我们还配置了"/oauth/token"接口的访问权限,并禁用了跨站请求伪造防护。

三、测试授权流程

在完成以上的配置后,我们就可以使用密码模式进行授权了。以下是测试密码模式授权的流程:

获取授权码

我们可以使用curl命令来模拟获取授权码的请求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ curl -X POST \
    -H "Authorization: Basic Y2xpZW50OnNlY3JldA==" \
    -d "grant_type=password&username=user&password=password" \
    "http://localhost:8080/oauth/token"

其中,Authorization头部包含了客户端的ID和Secret,"grant_type=password"表示使用密码模式进行授权,"username=user&password=password"表示使用用户名和密码进行身份验证

如果授权成功,我们会得到一个JSON响应:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyIiwic2NvcGVzIjpbInJlYWQiLCJ3cml0ZSJdLCJhdGkiOiIxMTIzNDU2Nzg5MCJ9.pSbSvReFV7OZ_Tp-DZ_wJeL-av-eK-LW-cFiAnO5PQo",
    "token_type": "bearer",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyIiwic2NvcGVzIjpbInJlYWQiLCJ3cml0ZSJdLCJhdGkiOiIxMTIzNDU2Nzg5MCJ9.Aqb5K5g9f_9Mj6HJU6M_W_y4D8OzVH1StAf0y7VbPvA",
    "expires_in": 43199,
    "scope": "read write",
    "jti": "11234567890"
}

访问资源

我们可以使用刚刚获取到的access_token来访问受保护的资源:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyIiwic2NvcGVzIjpbInJlYWQiLCJ3cml0ZSJdLCJhdGkiOiIxMTIzNDU2Nzg5MCJ9.pSbSvReFV7OZ_Tp-DZ_wJeL-av-eK-LW-cFiAnO5PQo" \
    "http://localhost:8080/api/hello"

如果access_token有效,我们会得到以下响应:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "message": "Hello, user!"
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
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 实现用户认证及单点登录
Spring Boot Security OAuth2 实现支持JWT令牌的授权服务器
之前的两篇文章,讲述了Spring Security 结合 OAuth2 、JWT 的使用,这一节要求对 OAuth2、JWT 有了解,若不清楚,先移步到下面两篇提前了解下。
程序员果果
2019/05/16
2.2K0
Spring boot 2.0 with Oauth2 + Jwt
中国广东省深圳市宝安区龙华镇溪山美地 518109 +86 13113668890 +86 755 29812080 <>
netkiller
2018/09/04
3K0
配置OAuth2认证服务器和资源服务器-完整示例
在 Spring Boot 项目的 application.yml 或 application.properties 文件中添加 OAuth2 认证服务器的配置:
堕落飞鸟
2023/04/13
1.7K0
Spring Cloud Security:Oauth2结合JWT使用
https://github.com/macrozheng/springcloud-learning
macrozheng
2019/11/07
3.6K0
Spring Cloud Security:Oauth2结合JWT使用
Spring Cloud Security:Oauth2实现单点登录
单点登录(Single Sign On)指的是当有多个系统需要登录时,用户只需登录一个系统,就可以访问其他需要登录的系统而无需登录。
macrozheng
2019/11/15
3.3K0
Spring Cloud Security:Oauth2实现单点登录
单点登录(Single Sign On)指的是当有多个系统需要登录时,用户只需登录一个系统,就可以访问其他需要登录的系统而无需登录。
JAVA葵花宝典
2019/11/18
1.6K0
Spring Cloud Security:Oauth2实现单点登录
Spring Security---Oauth2详解
在说明OAuth2需求及使用场景之前,需要先介绍一下OAuth2授权流程中的各种角色:
大忽悠爱学习
2021/12/07
4.8K0
Spring Security---Oauth2详解
使用Spring MVC测试Spring Security Oauth2 API
在Spring Security源码分析十一:Spring Security OAuth2整合JWT和Spring Boot 2.0 整合 Spring Security Oauth2中,我们都是使用Restlet Client - REST API Testing测试被Oauth2保护的API。在本章中,我们将展示如何使用MockMvc测试Oauth2的API。
java干货
2021/02/19
1.4K0
使用Spring MVC测试Spring Security Oauth2 API
Spring Security 系列(2) —— Spring Security OAuth2
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
求和小熊猫
2022/06/30
6.4K0
认证鉴权与API权限控制在微服务架构中的设计与实现(一)
引言: 本文系《认证鉴权与API权限控制在微服务架构中的设计与实现》系列的第一篇,本系列预计四篇文章讲解微服务下的认证鉴权与API权限控制的实现。 1. 背景 最近在做权限相关服务的开发,在系统微服务化后,原有的单体应用是基于session的安全权限方式,不能满足现有的微服务架构的认证与鉴权需求。微服务架构下,一个应用会被拆分成若干个微应用,每个微应用都需要对访问进行鉴权,每个微应用都需要明确当前访问用户以及其权限。尤其当访问来源不只是浏览器,还包括其他服务的调用时,单体应用架构下的鉴权方式就不是特别合适了
aoho求索
2018/04/03
3.4K0
认证鉴权与API权限控制在微服务架构中的设计与实现(一)
Spring Cloud Security OAuth2 中实现简化模式(一)
OAuth2 简化模式(Implicit Grant Type)是一种较为简单的授权模式,适用于移动设备和 Web 应用等场景。在简化模式下,客户端通过跳转认证服务器的授权页面,获取用户授权,然后直接获得访问令牌,省略了授权码的环节。本文将详细介绍在 Spring Cloud Security OAuth2 中如何实现简化模式,并给出相应的示例代码。
堕落飞鸟
2023/04/13
7550
Spring Cloud Security配置JWT和OAuth2的集成实现单点登录-示例
这个示例展示了OAuth2和JWT如何协同工作来实现单点登录和授权。通过使用Spring Cloud Security,我们可以轻松地实现这些功能,并提供强大而灵活的安全性支持。演示如何使用Spring Cloud Security和Spring Cloud Gateway来实现基于JWT和OAuth2的单点登录:
堕落飞鸟
2023/04/14
3.2K0
Spring Cloud Security OAuth2的授权模式授权码模式(一)
Spring Cloud Security OAuth2 是一种基于 Spring Cloud 技术栈的安全认证和授权框架。OAuth2 是一个广泛使用的标准,它定义了一种客户端/服务器协议,用于在不暴露用户凭证的情况下授权第三方应用程序访问受保护资源。OAuth2 的核心在于授权,而授权码模式是 OAuth2 最常用的一种授权方式。本文将详细介绍 Spring Cloud Security OAuth2 的授权码模式,并给出相应的代码示例。
堕落飞鸟
2023/04/13
2K0
spring security oauth2 password授权模式
前面的一篇文章讲了spring security oauth2的client credentials授权模式,一般用于跟用户无关的,开放平台api认证相关的授权场景。本文主要讲一下跟用户相关的授权模式之一password模式。
code4it
2018/09/17
2.2K0
从零开始的Spring Security Oauth2(一)
前言 今天来聊聊一个接口对接的场景,A厂家有一套HTTP接口需要提供给B厂家使用,由于是外网环境,所以需要有一套安全机制保障,这个时候oauth2就可以作为一个方案。 关于oauth2,其实是一个规范,本文重点讲解spring对他进行的实现,如果你还不清楚授权服务器,资源服务器,认证授权等基础概念,可以移步理解OAuth 2.0 - 阮一峰,这是一篇对于oauth2很好的科普文章。 需要对spring security有一定的配置使用经验,用户认证这一块,spring security oauth2建立在s
程序猿DD
2018/02/01
1.9K0
从零开始的Spring Security Oauth2(一)
[Spring Security] Spring Security OAuth2(密码模式)
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。
架构探险之道
2019/07/25
4.3K0
Spring Cloud Security使用OAuth2授权服务器来保护API
首先,我们需要配置OAuth2授权服务器。在本示例中,我们将使用Spring Boot和Spring Security来配置OAuth2授权服务器。
堕落飞鸟
2023/04/13
1.2K0
Spring Cloud Security的核心组件-OAuth2示例
下面我们通过一个基于 Spring Cloud Security 的 OAuth2 示例来演示 OAuth2 的工作流程。
堕落飞鸟
2023/04/13
4670
使用Spring Cloud Security OAuth2搭建授权服务
前言:  本文意在抛砖引玉,帮大家将基本的环境搭起来,具体实战方案还要根据自己的业务需求进行制定。我们最终没有使用Spring Security OAuth2来搭建授权服务,而是完全根据OAuth2标准自己实现的服务。 Spring Cloud Security OAuth2 是 Spring 对 OAuth2 的开源实现,优点是能与Spring Cloud技术栈无缝集成,如果全部使用默认配置,开发者只需要添加注解就能完成 OAuth2 授权服务的搭建。 1. 添加依赖 授权服务是基于Spring Secu
庞小明
2018/03/07
2.6K0
使用Spring Cloud Security OAuth2搭建授权服务
推荐阅读
相关推荐
Spring Cloud OAuth2 实现用户认证及单点登录
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验