0

据我所知,从 2021 年 7 月 1 日开始,将不再支持对 IAM API 上的 SignBlob 和 SignJwt 的调用,并且可能会失败。Google 正在弃用以下身份验证方法:iam.googleapis.com 相反,我们现在可以使用:iamcredentials.googleapis.com

我正在尝试切换到一个新的 API,但是当我发送一个签署 JWT 的请求时,我收到一个我不知道的错误。谁能帮我这个?这是示例代码和错误。(错误出现在方法“this.getClient().signJwt(request)”上。

public AccessToken getToken() {
    try {
      ServiceAccountName name = ServiceAccountName.parse(String.format("projects/-/serviceAccounts/%s",
          this.tenant.getServiceAccount()));
      SignJwtRequest request = SignJwtRequest.newBuilder()
          .setName(name.toString())
          .addAllDelegates(new ArrayList<>())
          .setPayload(getPayload())
          .build();

      SignJwtResponse signJwtResponse = this.getClient()
          .signJwt(request);

      return new AccessToken(signJwtResponse.getSignedJwt(), DateUtils.addSeconds(new Date(), 3600));

    } catch (Exception e) {      
    }
} 

private IamCredentialsClient getClient() throws IOException {
        if (this.iamClient == null) {
            this.iamClient = IamCredentialsClient.create();
        }
        return this.iamClient;
    }

private String getPayload() {
    JsonObject payload = new JsonObject();

    payload.addProperty("iat", System.currentTimeMillis() / 1000);
    payload.addProperty("iss", tenant.getServiceAccount());
    
    payload.addProperty("aud", "https://datastore.googleapis.com/google.datastore.v1.Datastore");
    payload.addProperty("sub", tenant.getServiceAccount());

    return payload.toString();
  }

错误文字:

Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: io/grpc/internal/ManagedChannelImplBuilder$ChannelBuilderDefaultPortProvider
AppException(error=AppError(code=500, reason=Server error., message=An unknown error has occurred., errors=null, debuggingInfo=null, originalException=org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: io/grpc/internal/ManagedChannelImplBuilder$ChannelBuilderDefaultPortProvider), originalException=org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: io/grpc/internal/ManagedChannelImplBuilder$ChannelBuilderDefaultPortProvider)
    at org.opengroup.osdu.storage.util.GlobalOtherExceptionMapper.handleGeneralException(GlobalOtherExceptionMapper.java:35)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
    at org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.doResolveHandlerMethodException(ExceptionHandlerExceptionResolver.java:409)
    at org.springframework.web.servlet.handler.AbstractHandlerMethodExceptionResolver.doResolveException(AbstractHandlerMethodExceptionResolver.java:61)
    at org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:141)
    at org.springframework.web.servlet.handler.HandlerExceptionResolverComposite.resolveException(HandlerExceptionResolverComposite.java:80)
    at org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1299)
...
...
Caused by: org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: io/grpc/internal/ManagedChannelImplBuilder$ChannelBuilderDefaultPortProvider
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055)
    ... 76 more
Caused by: java.lang.NoClassDefFoundError: io/grpc/internal/ManagedChannelImplBuilder$ChannelBuilderDefaultPortProvider
    at io.grpc.netty.shaded.io.grpc.netty.NettyChannelProvider.builderForAddress(NettyChannelProvider.java:38)
    at io.grpc.netty.shaded.io.grpc.netty.NettyChannelProvider.builderForAddress(NettyChannelProvider.java:24)
    at io.grpc.ManagedChannelBuilder.forAddress(ManagedChannelBuilder.java:39)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.createSingleChannel(InstantiatingGrpcChannelProvider.java:293)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.access$1700(InstantiatingGrpcChannelProvider.java:74)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider$1.createSingleChannel(InstantiatingGrpcChannelProvider.java:220)
4

0 回答 0