gpt4 book ai didi

.net - GCP 工作负载与 Azure 联合身份验证

转载 作者:行者123 更新时间:2023-12-03 01:15:47 43 4
gpt4 key购买 nike

我有一个用 C# 编写的 azure 函数,用于将消息发布到 gcp pubsub 主题。它与我们从 gcp 收到的凭证文件配合得很好,但现在由于某些安全性,我们希望使用身份联合并使用 AAD 租户生成的短期 token 来验证调用。我有生成访问 token 的代码

    public async Task<string> GetToken()
{
var credential = _userAssignedClientId == null
? new DefaultAzureCredential()
: new DefaultAzureCredential(new DefaultAzureCredentialOptions
{ ManagedIdentityClientId = _userAssignedClientId });

var accessToken =
await credential.GetTokenAsync(new TokenRequestContext(new[]
{ _resourceUri }));
return accessToken.Token;
}

这是我们用于凭据的代码

            var builder = new PublisherClientBuilder
{
JsonCredentials = _credentials,
TopicName = TopicName.FromProjectTopic(_projectId, _topicId)
};

var publisher = await builder.BuildAsync();

问题是,没有明显的方法将访问 token 引入 gcp .net 客户端,它只接收与访问 token 不同的凭据,并且 DefaultAzureCredential 生成的凭据也可以不被使用。问题是如何使用生成的 access_token 向 gcp 验证我的发布者。 Gcp 端还配置为信任 AAD 应用。

最佳答案

The question is how to use the generated access_token to authenticate my publisher to gcp

如果您拥有对 Google Cloud 有效的 access_token,则可以执行以下操作:

var builder = new PublisherClientBuilder
{
GoogleCredential = Google.Apis.Auth.GoogleCredential.FromAccessToken(accessToken);
TopicName = TopicName.FromProjectTopic(_projectId, _topicId);
};

请注意,我之所以说“如果您有一个对 Google Cloud 有效的 access_token”,是因为我不熟悉 DefaultAzureCredential 方法或其返回的凭据类型。

现在,无论如何,从 v1.58.0 开始 Google.Apis.Auth库是 Google 拥有并推荐给 Google 的 .NET Auth 库,支持工作负载联合身份验证,包括 Azure。

如果您关注Configure workload identity federation with Azure那么您的代码只需如下所示(即不指定凭据):

var builder = new PublisherClientBuilder
{
TopicName = TopicName.FromProjectTopic(_projectId, _topicId);
};

像这样构建的 PublisherClient 将使用 GOOGLE_APPLICATION_CREDENTIALS 引用的已配置工作负载身份联合凭据(来自上面的文档),并将根据需要生成和刷新访问 token 。

如果您遇到任何问题,请随时在https://github.com/googleapis/google-api-dotnet-client中创建并发布

关于.net - GCP 工作负载与 Azure 联合身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74994997/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com