springboot oauth2 授权码模式与密码模式探索

    oauth2支持授权的方式有四种:授权码模式(authorization_code)、密码模式(password)、隐式模式(implicit)、客户端模式(client_credentials)。其中,比较常见的就是授权码模式和密码模式。

    需要说明的是,授权码模式的过程大致如下:

1、封装参数,访问授权服务器登录与授权接口
   接口:http://localhost:8080/oauth/authorize
   参数:response_type client_id scope redirect_uri state
   返回值:code
2、拿到code,获取token
   接口:http://localhost:8080/oauth/token
   参数:client_id client_secret grant_type code redirect_uri state
   返回值:access_token
3、根据token,访问资源
   接口:http://localhost:8080/api/test/hello
   参数:access_token

    密码模式的过程如下:

1、根据用户名密码等参数直接获取token
   接口:http://localhost:8080/oauth/token
   参数:username password grant_type client_id client_secret redirect_uri
   返回值:access_token
2、根据token,访问资源
   接口:http://localhost:8080/api/test/hello
   参数:access_token

    可以看出,授权码模式和密码模式有些区别,授权码模式多了一步就是登陆。密码模式直接把用户名和密码交给授权服务器了,所以不用再人为登陆,这也要求用户非常信任该应用。 

    下面我们通过代码来实际感受一下他们的使用以及区别:

    也是构建一个项目,这里就不用分开授权服务和资源服务,统一放在一起:

    项目依赖主要还是security和oauth2:

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.1.4.RELEASE</version>
</parent>

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-security</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.security.oauth</groupId>
		<artifactId>spring-security-oauth2</artifactId>
		<version>2.3.4.RELEASE</version>
	</dependency>
</dependencies>

    项目结构:

     

    主要的代码:

    AuthServerConfiguration.java

package org.oauthsample.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
import org.springframework.security.oauth2.config.an
Spring Boot是一个开发Java应用的框架,它提供了便捷的配置和开发方式。OAuth2是一种授权协议,用于保护Web应用的资源。而微信是中国最大的社交媒体平台之一,也提供了OAuth2的接口用于用户授权。 在Spring Boot中使用OAuth2授权模式实现与微信的授权,需要进行以下步骤: 1. 配置OAuth2客户端信息:在应用的配置文件中,添加微信的OAuth2客户端信息,包括client id、client secret和授权回调地址等。 2. 创建Spring Security配置类:在配置类中,使用@EnableOAuth2Client注解启用OAuth2 Client功能,并配置OAuth2客户端信息。 3. 创建授权回调URL处理器:在回调URL处理器中,获取微信返回的授权以及其他相关参数,并将授权发送到微信的access token API获取访问令牌和刷新令牌。 4. 实现用户认证和授权逻辑:根据微信返回的访问令牌,获取用户的基本信息,并封装成Spring Security的UserDetails对象,用于用户认证和授权。 5. 创建前端页面:在前端页面显示微信授权按钮,用户点击后跳转至微信授权页面进行授权。 6. 处理授权后的回调请求:在回调请求处理器中,获取微信返回的授权,并将授权发送到服务端以获取访问令牌。 7. 使用访问令牌访问微信API:根据获取到的访问令牌,使用微信API获取用户的基本信息、用户授权范围等。 以上是使用Spring Boot实现与微信OAuth2授权模式的基本步骤。通过配置OAuth2客户端信息、处理授权回调、实现用户认证和授权逻辑,我们可以在Spring Boot应用中实现与微信的授权登录功能。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值