ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Java框架快速入门: Spring Security+OAuth2之搭建授权服务器(依赖与表结构)

Java框架快速入门: Spring Security+OAuth2之搭建授权服务器(依赖与表结构) 纲要微服务工程架构概述授权服务器auth-server资源服务器todo-service后端客户端webclient前端管理应用uaa-ui核心依赖引入spring-security-oauth2spring-security-oauth2-autoconfigure数据库表结构设计oauth_client_details表字段详解客户端标识、密钥、授权范围、授权类型、回调地址、权限、Token 有效期等微服务工程架构在实现 OAuth 2.0 认证体系时传统单体应用被拆分为多个独立微服务。工程目录中除原有模块外新增了todo-service和webclient两个核心工程其角色分配如下授权服务器承担 OAuth 2.0 授权服务器与部分资源服务器角色管理用户、权限及客户端注册信息。资源服务器todo-service提供受保护的 REST API如待办事项列表供客户端在获得授权后访问。客户端webclient以不同的 OAuth 2.0 授权流程授权码模式、客户端凭证模式、密码模式与授权服务器交互获取令牌并访问资源。前端管理界面uaa-ui作为前端客户端通过浏览器与授权服务器交互实现用户登录与客户端管理。项目运行端口配置在各自的application.yml中例如授权服务器使用8080资源服务器使用8082webclient使用其他端口各服务独立启动。工程结构树示意project-root/ ├── auth-server/ # 授权服务器 (含资源管理) │ ├── pom.xml │ └── src/main/resources/ │ └── application.yml # server.port8080 ├── todo-service/ # 资源服务器 │ ├── pom.xml │ └── src/main/resources/ │ └── application.yml # server.port8082 ├── webclient/ # 后端客户端 │ ├── pom.xml │ └── src/main/resources/ │ └── application.yml └── uaa-ui/ # 前端客户端 (Vue/React) ├── package.json └── ...各服务交互流程可用下图表示访问OAuth2 授权请求返回授权码/令牌携带令牌返回受保护资源管理用户/客户端OAuth2 登录用户webclient 客户端授权服务器 auth-server资源服务器 todo-service数据库uaa-ui 前端添加 OAuth2 依赖在授权服务器模块auth-server的pom.xml中引入 Spring Security OAuth2 依赖。目前基于 Spring Security OAuth2 的正式发布版本使用以下两个核心包dependencygroupIdorg.springframework.security.oauth/groupIdartifactIdspring-security-oauth2/artifactId/dependencydependencygroupIdorg.springframework.security.oauth.boot/groupIdartifactIdspring-security-oauth2-autoconfigure/artifactId/dependency说明spring-security-oauth2提供 OAuth2 的核心支持spring-security-oauth2-autoconfigure简化自动配置。版本号需与实际 Spring Boot 版本兼容通常在父 POM 或依赖管理器中统一声明。刷新 Maven 依赖后即可开始配置授权服务器。数据库表结构设计授权服务器需要持久化客户端信息因此需在数据库中创建相关表。核心表为oauth_client_details它存储每个客户端的注册数据。虽然 Spring Security OAuth2 还支持内存模式但生产环境推荐使用数据库存储。建表 SQL 语句如下CREATETABLEoauth_client_details(client_idvarchar(256)NOTNULLCOMMENT客户端唯一标识,resource_idsvarchar(256)DEFAULTNULLCOMMENT可访问的资源ID集合,client_secretvarchar(256)DEFAULTNULLCOMMENT客户端密钥加密,scopevarchar(256)DEFAULTNULLCOMMENT授权范围如 read,write,authorized_grant_typesvarchar(256)DEFAULTNULLCOMMENT授权类型如 authorization_code,password,client_credentials,refresh_token,web_server_redirect_urivarchar(256)DEFAULTNULLCOMMENT授权码模式回调地址,authoritiesvarchar(256)DEFAULTNULLCOMMENT客户端拥有的权限Spring Security authorities,access_token_validityint(11)DEFAULTNULLCOMMENT访问令牌有效期秒,refresh_token_validityint(11)DEFAULTNULLCOMMENT刷新令牌有效期秒,additional_informationvarchar(4096)DEFAULTNULLCOMMENT附加信息JSON格式,autoapprovevarchar(256)DEFAULTNULLCOMMENT自动授权范围true 或 scope 列表,PRIMARYKEY(client_id))ENGINEInnoDBDEFAULTCHARSETutf8;字段含义详解字段说明client_id客户端的唯一标识如web-client、app-clientresource_ids客户端可访问的资源服务器 ID 列表逗号分隔可用于限制访问特定资源服务实际项目中更多通过权限控制client_secret客户端密钥需加密存储用于客户端认证scope授权范围定义客户端能请求的权限粒度如read、write与用户权限形成两层控制authorized_grant_types允许的 OAuth2 授权流程常见值authorization_code、password、client_credentials、refresh_token、implicitweb_server_redirect_uri授权码模式下的回调地址授权服务器将授权码或令牌重定向到此 URLauthorities客户端自身的权限而非用户权限可用于资源服务器访问控制access_token_validity访问令牌的过期时间秒为空则使用全局默认值refresh_token_validity刷新令牌的过期时间秒为空则使用全局默认值additional_information自定义附加信息可存放业务需要的额外字段JSON 格式autoapprove如果设为true或具体 scope 列表则用户授权时不会弹出确认页面直接自动批准示例插入一条客户端数据INSERTINTOoauth_client_details(client_id,client_secret,scope,authorized_grant_types,web_server_redirect_uri,authorities,access_token_validity,refresh_token_validity,autoapprove)VALUES(web-client,{noop}secret,read,write,authorization_code,refresh_token,http://localhost:8082/login/oauth2/code/auth-server,ROLE_CLIENT,3600,7200,true);注{noop}表示密钥不加密存储仅开发测试生产环境应使用BCrypt等加密算法。后续步骤本文完成了 OAuth2 授权服务器的初始搭建明确了工程架构、引入了核心依赖、设计了客户端信息表。下一篇文章将进入授权服务器的核心配置实现包括 Spring Security 安全配置、OAuth2 授权服务器端点暴露以及 JWT 令牌的签发。总结本文基于实际项目需求介绍了微服务架构下 OAuth2 授权服务器的前置工作多服务划分、依赖管理和客户端表结构设计。这些是后续实现授权码、密码、客户端凭证等授权流程的基础。
返回列表