Google Endpoints Framework与Firebase认证问题:配置未定义身份验证提供者
解决Endpoints Framework部署后"No auth providers are defined in the config"错误
看起来你遇到的问题是虽然在@Api注解里配置了认证相关参数,但生成的OpenAPI配置里并没有正确包含认证提供者,导致部署后触发这个错误。下面是几个关键的排查和修复步骤:
1. 确保Authenticator类正确实现getAuthProviders方法
你的EspAuthenticator类必须继承AbstractAuthenticator,并且必须实现getAuthProviders()方法,返回你定义的认证提供者列表——这是很多人容易忽略的关键点,缺少这个方法会导致Endpoints无法生成包含auth providers的OpenAPI配置。
示例实现代码:
import com.google.api.server.spi.auth.AbstractAuthenticator; import com.google.api.server.spi.auth.common.AuthProvider; import java.util.Collections; import java.util.List; public class EspAuthenticator extends AbstractAuthenticator { private static final String FIREBASE_ISSUER = "https://securetoken.google.com/MY_PROJECT_ID"; private static final String FIREBASE_JWKS_URI = "https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com"; @Override public AuthProvider getAuthProvider(String authId) { // 匹配你在@Api注解里定义的issuer名称"firebase" if ("firebase".equals(authId)) { return AuthProvider.create() .setIssuer(FIREBASE_ISSUER) .setJwksUri(FIREBASE_JWKS_URI); } return null; } @Override public List<AuthProvider> getAuthProviders() { // 返回包含Firebase认证提供者的列表,这一步是关键! return Collections.singletonList(getAuthProvider("firebase")); } }
2. 补全@Api注解里的jwksUri参数
你的代码里jwksUri没有填写完整,Firebase的标准JWKS地址是https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com,确保@ApiIssuer里的参数完整:
@Api( name = "endpoint", version = "v1", apiKeyRequired = AnnotationBoolean.TRUE, authenticators = {EspAuthenticator.class}, issuers = { @ApiIssuer( name = "firebase", issuer = "https://securetoken.google.com/MY_PROJECT_ID", jwksUri = "https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com" ) } )
3. 重新生成并部署OpenAPI配置
修改代码后,需要重新生成OpenAPI文档并部署到Endpoints服务,确保新配置覆盖旧的:
- 如果用Maven,执行命令生成文档:
mvn endpoints-framework:openApiDocs - 然后部署生成的openapi.json文件:
gcloud endpoints services deploy target/openapi-docs/openapi.json
4. 验证部署后的OpenAPI配置
部署完成后,你可以通过Endpoints的服务管理页面查看生成的OpenAPI配置,确认securityDefinitions部分是否包含了你的Firebase认证提供者。如果这部分存在,说明配置已经生效。
内容的提问来源于stack exchange,提问作者Degoah
相关产品推荐
相关产品推荐

