Spring Boot应用向GCP Pub/Sub区域端点发消息遇认证异常排查
问题
我正在使用基于Spring Boot的应用向GCP Pub/Sub主题发布消息,为利用消息排序功能,需将消息发布到区域端点。已通过配置spring.cloud.gcp.pubsub.publisher.enable-message-ordering=true启用消息排序,并设置spring.cloud.gcp.pubsub.publisher.endpoint=us-east1-pubsub.googleapis.com:443指定区域端点,但发布时出现以下认证异常:
com.google.api.gax.rpc.UnauthenticatedException: io.grpc.StatusRuntimeException: UNAUTHENTICATED: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential.
不指定区域端点、使用全局端点发布时无异常,请问遗漏了什么配置?
依赖配置如下:
<dependency> <groupId>com.google.cloud</groupId> <artifactId>spring-cloud-gcp-starter</artifactId> </dependency> <dependency> <groupId>com.google.cloud</groupId> <artifactId>spring-cloud-gcp-starter-pubsub</artifactId> </dependency> <dependencyManagement> <dependencies> <dependency> <groupId>com.google.cloud</groupId> <artifactId>spring-cloud-gcp-dependencies</artifactId> <version>3.5.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
解决方案
指定GCP Pub/Sub区域端点时,需额外配置对应区域的认证元数据端点,否则认证流程无法获取有效凭证。具体需补充以下配置:
添加和Pub/Sub区域匹配的OAuth2令牌端点:
spring.cloud.gcp.pubsub.publisher.oauth2-endpoint=https://us-east1-pubsub.googleapis.com/oauth2/v4/token该端点必须与你设置的
spring.cloud.gcp.pubsub.publisher.endpoint区域保持一致(示例中为us-east1),确保令牌请求发送到对应区域的认证服务。若使用服务账号密钥文件认证,确认已配置正确的密钥路径(全局模式下已配置则无需重复):
spring.cloud.gcp.credentials.location=classpath:your-service-account-key.json
原因:全局端点会自动使用默认的全局认证服务,但区域端点需要明确指定对应区域的OAuth2令牌端点,否则认证请求会发送到错误地址,导致无法获取有效凭证,触发UNAUTHENTICATED异常。
内容的提问来源于stack exchange,提问作者Rishabh Rastogi
相关产品推荐
相关产品推荐

