当调用google oauth库方法时,它会失败而不会出错--再多的try/catch-ing都不会捕获任何错误消息。
我正在尝试获取身份令牌,就像我使用gcloud cli从命令行执行gcloud auth print-identity-token一样。
想要身份令牌的原因是,另一个云函数服务需要它作为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;
}在上面的代码中,作用域留在了前一次尝试的代码中,其中包含云函数服务的端点。https://subdomain.cloudfunctions.net/cloud-function/v1/是我作为web的一部分调用的云函数端点的一般形式。
这是一种有效且合理的方式来获得gcloud auth print-identity-token的等价物吗?如果是这样,为什么会出现史诗般的失败?
我需要使用google服务帐户进行服务到服务身份验证。开发环境为visual studio 2019,.net核心3.1,docker/linux
PS -服务账号具有云函数的cloud Functions调用者角色。
PPS -这个问题似乎与docker有关,当我在docker中开始我的项目时,我得到了一组错误消息。我忽略了它们,因为它们直到现在都没有影响到功能。
at System.Net.Http.CurlHandler.ThrowIfCURLEError(CURLcode error) at System.Net.Http.CurlHandler.MultiAgent.FinishRequest(StrongToWeakReference`1 easyWrapper,CURLcode messageResult)
在windows上运行代码是可行的。
发布于 2020-06-04 03:42:15
倒数第二个问题是,我需要使一个上游方法异步并添加一个await。现在,上面的代码每次都可以工作。这一变化将我引向了最终的问题,它的解决方案是在ConfigureServices()中与AddHttpClient()设置相关的一些代码重构。
curl异常是由于尝试添加logger.loggerFactory.AddGoogle(…)造成的配置错误。这是糟糕的一天。
这个问题也是一个不应该做的例子--即我用了太多的极简主义来描述这个问题。
https://stackoverflow.com/questions/62163679
复制相似问题