Oauth2.0 实现短信验证码登录过程详解(微服务)

本文详细介绍了如何在已有的Spring Cloud OAuth2环境中,通过自定义SmsTokenGranter实现短信验证码登录。首先分析了Oauth2.0的授权模式,然后讲解了如何在源码中扩展授权模式,创建验证码类并进行验证,最后通过实际调用来测试验证码登录的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oauth2.0 实现短信验证码登录过程详解

1.前言

公司新分配了微服务的项目,要求在已有密码登陆的架构上增加手机验证码登陆功能,原有的密码登陆都没摸清的我懵逼了,百度看了很多Spring Security 和 OAuth2基本概念还有一些如何实现短信验证码登录功能的博客,很多文章一上来就给你展示n个类的,或者直接贴上一大堆代码的,对于才了解一点基本概念的我来说属实有点难啃,好在找到了一位大佬将思路以及实现写的很清晰的文章,鉴于大佬的文章图片挺模糊的,我把这几天弄出来的功能简单整理一下,做个记录。(不想看分析,想直接简单粗暴开始干的请直接跳到标题为编码阶段的开始看)

阅读本文需要的基础知识:

  • 熟练掌握Java
  • 掌握了Spring Boot基础知识
  • 默认已经整合好密码模式

架构搭建

本文只说验证码登录相关部分,默认大家Spring Cloud OAuth2这部分环境已经搭建好。
Spring Cloud OAuth2 实现用户认证及单点登录

2.需求

OAuth 2 有四种授权模式,分别是授权码模式(authorization code)、简化模式(implicit)、密码模式(resource owner password credentials)、客户端模式(client credentials)。

想了解简单的Spring Security 与 OAuth2的基本概念和应用场景的可以点这里

但是有时候我们需要一些自己特殊的模式登录,比如说验证码登录,第三方登录等等。上面几种模式并不是很方便,下面是将密码模式改造成手机验证码的方式来登录。

3.思路分析

TokenEndpoint类中可以看到入口/oauth/token

在这里插入图片描述
首先我们要知道/oauth/token是我们登录验证调用的接口,无论是get还是post都会走到post这个方法中。

其次我们需要打断点去看一下源码,了解两件事。

1、哪一步加入的四种授权模式。(因为四种授权模式是写死在源码里的,拓展的时候我们得自己加上)

2、密码模式是在哪里开始验证用户名密码。(为的是改造那部分来写自己的验证码模式)

4.看源码阶段

在这里插入图片描述

OAuth2AccessToken token = getTokenGranter().grant(tokenRequest.getGrantType(), tokenRequest);

这句代码就是我们要找的突破点

getTokenGranter()会调用tokenGranter(),tokenGranter的内容为:

在这里插入图片描述

getDefaultTokenGranters()

就是这个方法,写死了那四种授权模式。红圈部分是在添加密码模式,之后我们就是要在这里添加我们的授权码模式
在这里插入图片描述

密码模式实现类ResourceOwnerPasswordTokenGranter

在这里插入图片描述
ResourceOwnerPasswordTokenGranter继承了AbstractTokenGranter类

而AbstractTokenGranter的实现类正好对应着四种授权模式࿰

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值