ArmorAuthSpring Boot Starter
Spring Boot integration

Starter 使用指南

armorauth-spring-boot-starter 面向接入方 Spring Boot 服务,帮助业务服务校验访问令牌、 接入 OIDC 登录,并按标准 OAuth2/OIDC 与 ArmorAuth 交互。

能力边界

Starter 是业务应用的接入包,不是授权服务器运行时。租户、用户、Client、MFA、JWK 和身份源仍由 ArmorAuth 服务端和管理台维护。

API

Resource Server

业务 API 使用 Spring Security 校验 JWT,按 Scope、角色或权限控制访问。

WEB

OIDC Login

传统 Web 或 BFF 通过 Authorization Code 登录,用户身份由 ArmorAuth 托管。

EXT

业务扩展

当前用户解析、Admin API 调用和 Token Relay 应按业务边界显式接入和测试。

当前版本优先提供轻量接入体验。复杂安全链、多 Client 共存、Admin Client 封装和 Token Relay 白名单建议由业务项目显式配置, 后续再沉淀为可复用扩展点。

添加依赖

只在需要接入 ArmorAuth 的业务服务中添加 Starter。授权服务器自身不需要通过 Starter 启动。

<dependency>
  <groupId>com.armorauth</groupId>
  <artifactId>armorauth-spring-boot-starter</artifactId>
  <version>1.0.0</version>
</dependency>

OAuth2 接入方式

先在管理台创建应用,再把端点和 Client 配置写入业务服务。不同类型的业务系统不要共用同一个 Client。

场景协议选择Spring Boot 接入点
REST API JWT Bearer Token,资源服务器验签。 spring.security.oauth2.resourceserver.jwt.issuer-uri
Web / BFF Authorization Code + Client Secret。 spring.security.oauth2.client.registration
SPA / 移动端 Authorization Code + PKCE,公共客户端。 前端或移动端 SDK 发起 PKCE,后端只做 API 资源服务器。
服务间调用 Client Credentials,最小 Scope。 用 Spring OAuth2 Client 获取 Token,再调用下游 API。
设备登录 Device Authorization Grant。 设备端请求 device code,用户在 ArmorAuth 激活页确认。

Resource Server

API 服务推荐只配置资源服务器。资源服务器通过 issuer 或 JWKS 验证访问令牌,再用 Scope、角色或权限做业务授权。

配置要点

  • 优先使用 issuer-uri,让 Spring Security 自动读取 Discovery。
  • 公共接口单独放行,业务接口默认要求认证。
  • 角色、权限、组织等 claims 的解释规则要在业务服务内明确测试。
spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: http://localhost:9000

armorauth:
  resource-server:
    enabled: true
如果业务服务同时承担 Web 登录和 API 资源服务器职责,建议显式声明多个有序 SecurityFilterChain, 避免登录页面、API 和静态资源的 matcher 相互覆盖。

OIDC Login

传统 Web 服务或 BFF 可以作为 OAuth2 Client,通过 ArmorAuth 托管登录页完成认证,再在服务端维护会话。

spring:
  security:
    oauth2:
      client:
        registration:
          armorauth:
            client-id: dashboard
            client-secret: ${ARMORAUTH_CLIENT_SECRET}
            authorization-grant-type: authorization_code
            client-authentication-method: client_secret_basic
            scope: openid,profile,email
            redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
        provider:
          armorauth:
            issuer-uri: http://localhost:9000

登录后身份

  • 业务页面读取 OidcUserOAuth2AuthenticationToken
  • 如果需要调用下游 API,优先使用 OAuth2 Authorized Client 管理访问令牌。
  • 退出流程以 Discovery 或管理台端点详情为准,post logout redirect URI 必须在应用中登记。

当前用户上下文

业务服务通常需要把 JWT 或 OIDC 用户信息转换成自己的当前用户模型。推荐把 claim 映射集中封装,避免控制器重复解析 Token。

record CurrentUser(
    String subject,
    String username,
    String tenantId,
    List<String> roles,
    List<String> scopes
) {}
字段常见 Claim用途
subject / usernamesub, preferred_username当前登录用户
tenantIdtenant_id租户感知业务隔离
organizationIdsorg_ids组织范围过滤
roles / permissionsroles, permissions业务授权判断
scopesscope, scpAPI 访问范围

Admin API Client

内部自动化、批量开通和运维工具可以调用 ArmorAuth 管理 API。生产环境建议用独立服务账号、最小 Scope、超时、重试和错误映射。

RestClient adminClient = RestClient.builder()
    .baseUrl("http://localhost:9000")
    .defaultHeader(HttpHeaders.AUTHORIZATION, "Bearer " + adminToken)
    .build();
  • 不要把超级管理员密码写入业务服务配置。
  • Client Credentials 或服务账号 Token 应只授予需要的管理 Scope。
  • 批量任务要记录请求 ID、调用人、租户和失败原因,便于审计。

Token Relay

Token Relay 适合 BFF 或网关把当前用户访问令牌转发给受信下游。它不等同于 OAuth2 Client 自动换取 Token, 也不应把用户 Token 发给第三方或未登记服务。

RestClient downstream = RestClient.builder()
    .baseUrl("http://orders-service")
    .requestInterceptor((request, body, execution) -> {
      Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
      if (authentication instanceof JwtAuthenticationToken jwt) {
        request.getHeaders().setBearerAuth(jwt.getToken().getTokenValue());
      }
      return execution.execute(request, body);
    })
    .build();
只对可信下游开启 Token Relay。跨系统调用更推荐用 Client Credentials 获取服务级 Token,并按 Scope 控制权限。

扩展点

业务项目的安全边界往往不同,以下能力建议作为应用内配置或后续 starter 扩展点沉淀。

JWT authorities converter SecurityFilterChain customizer OIDC success / failure handler Admin RestClient customizer Token relay allowlist Micrometer observation
扩展方向建议
JWT 权限映射同时覆盖 scopescprolespermissions 和组织角色。
安全链共存Resource Server、OIDC Login、Actuator 和静态资源分别设置 matcher 与 order。
Admin Client统一封装认证、超时、错误映射、审计字段和重试策略。
可观测性记录 401/403、下游调用、token relay、身份源回调和管理 API 延迟。