谷歌云身份令牌oidcToken.GetAccessTokenAsync()失败,没有错误信息。

问题描述 投票:0回答:1

当调用google oauth库方法时,它没有出错就失败了--没有任何数量的trycatch-ing捕捉到任何错误信息。

我试图获得一个身份令牌,就像我在执行 gcloud auth print-identity-token 使用 gcloud cli 从命令行获取身份令牌。

需要身份令牌的原因是,另一个云功能服务需要它作为 Authorization : Bearer [token]当我在我的代码中插入一个手动生成的身份标记时,它确实可以正常工作。这不是一个适合开发或生产的解决方案。

我从众多来源中拼凑出来的代码片段是这样的,用于获取身份令牌。

        using (var stream = new FileStream(credentialsFilePath, FileMode.Open, FileAccess.Read))
        {
            var credentials = GoogleCredential.FromStream(stream);
            if (credentials.IsCreateScopedRequired)
            {
                credentials = credentials.CreateScoped(scopes);
            }

            OidcToken oidcToken = await credentials.GetOidcTokenAsync(
                   Options
                      .FromTargetAudience(scopes[0])
                      .WithTokenFormat(OidcTokenFormat.Standard));

            // this line bombs immediately, jumping out of this method and the calling method.
            string token = await oidcToken.GetAccessTokenAsync();

            return token;
         }

在上面的代码中,scopes[0]是之前一次尝试留下的代码 它包含了云功能服务的端点。https:/subdomain.cloudfunctions.netcloud-functionv1。 是我作为 web api 的一部分调用的云函数端点的一般形式。

这是否是一种有效和合理的方式来获取相当于 gcloud auth print-identity-token? 如果是,为什么会出现史诗级的失败?

我需要使用google服务账号进行服务对服务的认证。开发环境是visual studio 2019,.net core 3.1,dockerlinux。

PS--服务账号有云函数的云函数Invoker角色。

PPS - 这个问题似乎与docker和我在docker中启动项目时得到的一组错误信息有关。我一直忽略了它们,因为直到现在它们还没有损害功能。

在System.Net.Http.CurlHandler.ThrowIfCURLEError(CURLcode error)在System.Net.Http.CurlHandler.MultiAgent.FinishRequest(StrongToWeakReference`1 easyWrapper, CURLcode messageResult)

运行在windows上的代码工作。

asp.net-web-api google-oauth
1个回答
0
投票

倒数第二个问题是,我需要将一个上游方法异步化,并添加一个 await。现在上面的代码每次都能正常工作。这个改变让我找到了最终的问题,其解决方案是在ConfigureServices()中对与AddHttpClient()设置相关的代码进行重构。

curl异常是由于试图在配置不好的情况下添加logger.loggerFactory.AddGoogle(...).这真是一个糟糕的发日。

这个问题也是一个不能做的例子--即我用了太多的极简主义来描述这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.