跳到正文

sdk/java

Java 17+ 服务端 SDK,提供 networkless JWT 验证、HTTP 请求认证和 webhook 签名校验。

状态

已在本地实现并验证。针对真实 XID 实例的 IdP 往返验证(JWKS 获取、token 签名/验证)尚未执行,生产使用前必须完成。

安装

需要 Java 17+ 和 Maven。

<dependency>
  <groupId>dev.xid</groupId>
  <artifactId>xid-sdk-java</artifactId>
  <version>0.1.0-SNAPSHOT</version>
</dependency>

快速开始

在应用启动时创建一个 XidClient 并作为单例使用。

import dev.xid.sdk.XidClient;
import dev.xid.sdk.XidClientOptions;
import dev.xid.sdk.XidClaims;
import dev.xid.sdk.XidTokenException;
import dev.xid.sdk.XidJwksException;

XidClient xid = XidClient.create(
    XidClientOptions.builder()
        .issuer("https://xid.dev")
        .audience("your-client-id")
        .webhookSecret("whsec_xxx")
        .build()
);

try {
    XidClaims claims = xid.verifyToken(accessToken);
    String userId = claims.getSub();
    String scope  = claims.getScope();
} catch (XidTokenException e) {
    response.sendError(401, "Unauthorized: " + e.getReason());
} catch (XidJwksException e) {
    response.sendError(503, "Service unavailable");
}

认证 HTTP 请求

import dev.xid.sdk.AuthResult;

// Option A: pass Authorization header value directly
AuthResult result = xid.authenticateRequest(authHeader, null);

// Option B: pass a headers Map (Spring MVC example)
Map<String, String> headers = Collections.list(request.getHeaderNames())
    .stream()
    .collect(Collectors.toMap(h -> h, request::getHeader));
AuthResult result = xid.authenticateRequest(headers);

if (result.isAuthenticated()) {
    String userId = result.getClaims().get().getSub();
} else {
    response.sendError(401);
}

验证 webhook

import dev.xid.sdk.XidWebhookException;

byte[] rawBody = request.getInputStream().readAllBytes();
Map<String, String> headers = Map.of(
    "svix-id",        request.getHeader("svix-id"),
    "svix-timestamp", request.getHeader("svix-timestamp"),
    "svix-signature", request.getHeader("svix-signature")
);

try {
    xid.verifyWebhook(headers, rawBody);
} catch (XidWebhookException e) {
    response.sendError(400, "Invalid webhook: " + e.getReason());
}

XidClientOptions

方式 默认 描述
.issuer(String) 必填 OIDC 签发方;必须与 token iss 完全匹配
.audience(String) null 期望的 aud;null 跳过验证
.webhookSecret(String) null Webhook 密钥(whsec_ 前缀或原始 base64)
.jwksCacheDuration(Duration) 1 小时 JWKS 内存缓存 TTL
.clockSkewTolerance(Duration) 30 秒 exp/nbf 时钟偏差容忍度
.connectTimeout(Duration) 5 秒 JWKS 获取的 HTTP 连接超时
.readTimeout(Duration) 10 秒 JWKS 获取的 HTTP 读取超时

平台注意事项

  • 使用 nimbus-jose-jwt 进行 JWT/JWKS 解析。ES256 为主要算法;支持 RS256 和 PS256。
  • 所有公开 API 均为同步且线程安全。
  • 通过 SLF4J facade 记录日志;请自行引入实现(Logback、Log4j2)。
  • 异常层级:XidException -> XidTokenExceptionXidJwksExceptionXidWebhookException
导航

输入内容以搜索...

使用方向键导航按 Enter 键选择按 Escape 键关闭