| 环境组件 | 版本 | 备注 |
|---|---|---|
| PigX | 5.9 | |
| JDK | 17 |
本文详细介绍如何在 Spring Authorization Server 中实现自定义认证模式,以邮件验证码登录为例,展示完整的自定义认证流程实现。
在传统的 OAuth2 授权流程中,通常使用用户名密码进行身份验证。但在某些业务场景下,我们可能需要使用其他方式进行身份验证,比如:
本文将演示如何基于 Spring Authorization Server 实现邮件验证码登录的自定义认证模式,为其他自定义认证方式提供参考模板。
自定义认证模式主要涉及以下核心组件:
首先定义自定义的认证令牌类,用于封装邮件登录的认证信息:
关键点说明:
OAuth2ResourceOwnerBaseAuthenticationToken 基类在 AuthorizationServerConfiguration 中注册自定义的邮件认证模式:
配置要点:
Spring Security 回调业务的入口,负责根据邮件地址加载用户信息:
核心功能:
通过 SPI 机制注册自定义的 UserDetailService:
注册步骤:
META-INF/services 目录下创建配置文件配置 PigxDaoAuthenticationProvider 跳过密码校验:
配置说明:
首先在数据库中插入支持邮件认证的客户端配置:
配置说明:
client_id: 客户端标识符authorized_grant_types: 授权类型设置为 "email"scope: 权限范围access_token_validity: 访问令牌有效期(秒)使用 curl 命令测试邮件认证接口:
请求参数说明:
grant_type=email: 指定使用邮件认证模式code=1234: 邮件验证码email=sw@pigx.vip: 用户邮件地址scope=server: 请求的权限范围Authorization: 客户端认证信息(Base64 编码)预期响应: