You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置OpenAPI(Swagger)结合Auth0授权码流遇JWE密钥错误求助

配置OpenAPI(Swagger)+Auth0授权码流时的JWE解码错误问题

在配置OpenAPI(Swagger)以Auth0作为安全提供商,采用授权码(authorization code)流时出现错误。Auth0端已完成API及Machine2machine类型应用的配置,报错信息如下:

www-authenticate: Bearer error="invalid_token",error_description="尝试解码Jwt时出错:加密JWT被拒绝:未配置JWE密钥选择器",error_uri="https://tools.ietf.org/html/rfc6750#section-3.1"

OpenAPI配置代码

@Configuration
public class OpenApiConfiguration {

    private static final String OAUTH_SCHEME_NAME = "oauth";

    @Bean
    public OpenAPI customizeOpenAPI() {
        return new OpenAPI()
            .addSecurityItem(new SecurityRequirement()
                .addList(OAUTH_SCHEME_NAME))
            .components(new Components()
                .addSecuritySchemes(OAUTH_SCHEME_NAME, createOAuthScheme()))
            .addSecurityItem(new SecurityRequirement().addList(OAUTH_SCHEME_NAME));
    }

    private SecurityScheme createOAuthScheme() {
        return new SecurityScheme().type(SecurityScheme.Type.OAUTH2).flows(createOAuthFlows());
    }

    private OAuthFlows createOAuthFlows() {
        OAuthFlow scopes = new OAuthFlow()
            .authorizationUrl("https://dev-xxxxxx.us.auth0.com/authorize")
            .refreshUrl("https://dev-xxxxxx.us.auth0.com/oauth/token")
            .tokenUrl("https://dev-xxxxxx.us.auth0.com/oauth/token")
            .scopes(new Scopes());
        return new OAuthFlows().authorizationCode(scopes);
    }
}

Security配置代码

@Configuration
@EnableMethodSecurity
@RequiredArgsConstructor
public class SecurityConfiguration {

private final Auth0JwtAuthConverter jwtAuthConverter;

private final SecurityProperties securityProperties;

@Value("${spring.security.oauth2.resourceserver.jwt.issuer-uri}")
private String issuerUri;

private final Auth0AudienceValidator audienceValidator;

private final Auth0SignatureValidator signatureValidator;

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
        .authorizeHttpRequests(req ->
            req.requestMatchers(getPermittedMatchers()).permitAll()
                .anyRequest()
                .authenticated())
        .cors(withDefaults())
        .csrf(AbstractHttpConfigurer::disable)
        .oauth2ResourceServer(auth -> auth.jwt(token -> token.jwtAuthenticationConverter(jwtAuthConverter)));

    return http.build();
}

private String[] getPermittedMatchers() {
    return securityProperties.getPermittedMatchers().toArray(String[]::new);
}

@Bean
public JwtDecoder jwtDecoder() {
    NimbusJwtDecoder jwtDecoder = JwtDecoders.fromOidcIssuerLocation(issuerUri);

    OAuth2TokenValidator<Jwt> issuerValidator = JwtValidators.createDefaultWithIssuer(issuerUri);

    OAuth2TokenValidator<Jwt> delegate = new DelegatingOAuth2TokenValidator<>(issuerValidator, audienceValidator,
        signatureValidator);

    jwtDecoder.setJwtValidator(delegate);

    return jwtDecoder;
}

YAML配置文件

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: https://dev-xxxx.us.auth0.com/
          audiences: https://userapi
          jwk-set-uri: https://dev-xxxx.us.auth0.com/.well-known/jwks.json
springdoc:
  api-docs:
    path: /api-docs
  swagger-ui:
    oauth:
      client-id: ${auth0.client-id}
      client-secret: ${auth0.client-secret}
    oauth2-redirect-url: http://localhost:8080/swagger-ui/oauth2-redirect.html

内容的提问来源于stack exchange,提问作者Danil Tk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 19:06:20