能否在Google Cloud .NET客户端库中用OAuth2凭证替代服务账号/ADC?
在Google Cloud .NET客户端库中使用自定义OAuth访问令牌认证
完全可以直接用你已获取的OAuth访问令牌来完成认证,不需要额外的客户端库。核心思路是通过自定义凭证类实现ICredential接口,将令牌注入到客户端库中,具体操作如下:
- 自定义凭证类,封装你的访问令牌:
using Google.Apis.Auth.OAuth2; using System.Threading; using System.Threading.Tasks; public class AccessTokenCredential : ICredential { private readonly string _accessToken; public AccessTokenCredential(string accessToken) { _accessToken = accessToken; } public Task<string> GetAccessTokenForRequestAsync(string authUri = null, CancellationToken cancellationToken = default) { // 直接返回已有的访问令牌 return Task.FromResult(_accessToken); } }
- 用这个凭证初始化
ProjectsClient:
using Google.Cloud.ResourceManager.V3; // 替换成你实际的访问令牌 var accessToken = "你的OAuth访问令牌"; var credential = new AccessTokenCredential(accessToken); var client = new ProjectsClientBuilder { Credential = credential }.Build(); // 调用资源管理器API创建项目示例 var createRequest = new CreateProjectRequest { Project = new Project { ProjectId = "your-project-id-123", Name = "你的项目名称" } }; var operation = await client.CreateProjectAsync(createRequest); await operation.PollUntilCompletedAsync();
需要注意的细节:
- 确保你的访问令牌包含Resource Manager API所需的权限范围,比如
https://www.googleapis.com/auth/cloud-platform或更具体的https://www.googleapis.com/auth/resourcemanager.projects.create - 访问令牌有有效期,过期后需要自行处理令牌刷新逻辑,再更新
AccessTokenCredential中的令牌值 - 确认获取令牌的授权用户拥有对应操作权限,比如创建项目需要Organization Administrator或Project Creator角色
内容的提问来源于stack exchange,提问作者sharpener
相关产品推荐
相关产品推荐

