适用场景
- 业务 API 只需要校验 JWT,不需要托管登录页面。
- 通过
issuer-uri或jwk-set-uri指向 ArmorAuth。 - 需要特殊放行路径时配置
permit-all。
为接入 ArmorAuth 的 Spring Boot 服务提供开箱即用的安全集成:校验访问令牌、接入 OIDC 登录、 读取当前用户上下文,并按需转发 Token 或调用管理 API。
Starter 只放在业务服务中使用,不带入授权服务器运行时。按业务场景开启 Resource Server、OIDC Login 或 Admin Client 即可。
<dependency>
<groupId>com.armorauth</groupId>
<artifactId>armorauth-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
适合 API 服务。默认保护 /api/**,放行 /api/public/**,并把 ArmorAuth 的角色、Scope、权限和组织角色映射为
Spring Security authorities。
issuer-uri 或 jwk-set-uri 指向 ArmorAuth。permit-all。armorauth:
resource-server:
enabled: true
security-matcher: /api/**
permit-all:
- /api/public/**
principal-claim: preferred_username
spring:
security:
oauth2:
resourceserver:
jwt:
issuer-uri: http://localhost:9000
适合传统 Web 服务或 BFF。Starter 会创建登录过滤链,启用 oauth2Login,并支持配置登录成功页和退出页。
armorauth:
oidc-client:
enabled: true
default-success-url: /dashboard
logout-success-url: /
spring:
security:
oauth2:
client:
registration:
armorauth:
client-id: sample-client
client-secret: sample-secret
scope: openid,profile,email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
provider:
armorauth:
issuer-uri: http://localhost:9000
ArmorAuthCurrentUserResolver 从 JWT 或 OIDC user attributes 中读取用户、租户、组织、角色、Scope 和权限声明。
@RestController
class ProfileController {
private final ArmorAuthCurrentUserResolver currentUserResolver;
ProfileController(ArmorAuthCurrentUserResolver currentUserResolver) {
this.currentUserResolver = currentUserResolver;
}
@GetMapping("/api/me")
ArmorAuthCurrentUser me() {
return currentUserResolver.currentUser();
}
}
| 字段 | 来源 Claim | 用途 |
|---|---|---|
| subject / username | sub, preferred_username | 当前登录用户 |
| tenantId | tenant_id | 租户感知业务隔离 |
| organizationIds | org_ids | 组织范围过滤 |
| roles / permissions | roles, permissions | 业务授权判断 |
| scopes | scope, scp | API 访问范围 |
Starter 可以创建轻量 Admin API Client,适合内部自动化、应用开通、用户同步或后台运维工具。
armorauth:
admin-client:
enabled: true
base-url: http://localhost:9000
bearer-token: ${ARMORAUTH_ADMIN_TOKEN}
@Service
class ApplicationProvisioningService {
private final ArmorAuthAdminRestClient adminClient;
Map<String, Object> applications() {
return adminClient.listApplications(0, 20);
}
}
ArmorAuthTokenRelayInterceptor 以独立 Bean 暴露,建议只挂到可信下游服务的 RestClient,避免用户 Token 被转发到非受信目标。
@Bean
RestClient downstreamClient(RestClient.Builder builder,
ArmorAuthTokenRelayInterceptor tokenRelay) {
return builder
.baseUrl("http://orders-service")
.requestInterceptor(tokenRelay)
.build();
}
Starter 暴露多个可替换扩展点,业务项目可以在不 fork Starter 的前提下调整安全链、权限映射、Admin Client 和 Token Relay 行为。