ArmorAuthSpring Boot Starter
Spring Boot integration

Starter 使用指南

为接入 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>

Resource Server

适合 API 服务。默认保护 /api/**,放行 /api/public/**,并把 ArmorAuth 的角色、Scope、权限和组织角色映射为 Spring Security authorities。

适用场景

  • 业务 API 只需要校验 JWT,不需要托管登录页面。
  • 通过 issuer-urijwk-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

OIDC Login

适合传统 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 / usernamesub, preferred_username当前登录用户
tenantIdtenant_id租户感知业务隔离
organizationIdsorg_ids组织范围过滤
roles / permissionsroles, permissions业务授权判断
scopesscope, scpAPI 访问范围

Admin RestClient

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);
  }
}

Token Relay

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 行为。

ArmorAuthResourceServerHttpSecurityCustomizer ArmorAuthOidcClientHttpSecurityCustomizer ArmorAuthJwtAuthenticationConverterCustomizer ArmorAuthAdminRestClientCustomizer
Starter 默认配置只负责接入体验,生产项目仍应按业务安全边界显式配置授权规则、下游白名单和凭据来源。