资源认证模块基于 Spring Security OAuth2 Resource Server,保护 API 资源端点。
支持两种 Token 校验模式:
-
远程校验:通过
spring.security.oauth2.resourceserver.jwt.jwk-set-uri配置,向授权服务器实时校验 Token -
本地校验:实现
LocalTokenService接口,在本地完成 Token 解析和校验,减少网络开销
配置
spring:
security:
oauth2:
resourceserver:
jwt:
# 远程校验模式:JWK Set URI
jwk-set-uri: http://auth-server/oauth2/jwks
如果同时配置了 LocalTokenService Bean,将优先使用本地校验模式。
|
Gradle 引用
// 资源保护
implementation 'com.luamas.thinkbridge:authorization-resource-spring-boot-starter'
完整代码如下:
plugins {
id 'org.springframework.boot' version '4.1.1'
id 'io.spring.dependency-management' version '1.1.7'
id 'java'
}
group = 'com.thinkbridge.demo'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '25'
ext {
set('springCloudVersion', "2025.1.3")
set('thinkBridgeVersion', "2025.1.2")
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'com.luamas.thinkbridge:authorization-resource-spring-boot-starter'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
implementation "org.springframework.boot:spring-boot-starter-actuator"
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
mavenBom "com.luamas.thinkbridge:thinkbridge-bom:${thinkBridgeVersion}"
}
}
test {
useJUnitPlatform()
}
自定义token认证
当需要自定义本地 Token 认证逻辑时,必须实现 com.luamas.thinkbridge.common.security.oauth2.resource.local.LocalTokenService 接口。
实现示例
以下示例展示了如何实现自定义的本地 Token 认证服务:
package com.thinkbridge.demo.servicea;
import com.luamas.thinkbridge.common.security.oauth2.resource.local.LocalTokenService;
import com.luamas.thinkbridge.common.security.vo.AuthAuthority;
import com.luamas.thinkbridge.common.security.vo.UserInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.stereotype.Component;
import java.util.*;
@Component
@RequiredArgsConstructor
public class MyLocalTokenService implements LocalTokenService {
@Override
public UserInfo verify(String token) {
return new UserInfo() {
@Override
public String getUserId() {
return "123";
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return Collections.singleton(new AuthAuthority("qas"));
}
@Override
public List<String> getRoleIds() {
return new ArrayList<>();
}
@Override
public Map<String, Object> getExtend() {
return new HashMap<>();
}
@Override
public String getName() {
return "123";
}
};
}
}
| 如果有自定义本地认证需要的使用者,建议将其放在自己所有服务的 common 模块内,并进行依赖共享。 |