c# - 由 json 私钥文件(ServiceAccount)创建的 GoogleCredential - 如何将用户设置为模拟?

标签 c# .net google-api google-api-dotnet-client

刚开始使用 Google Apis。 在我的 Google Cloud Platform 帐户中,我为全域委托(delegate)创建了一个服务帐户。我为此服务帐户保存了一个 json 格式的私钥文件。

在我的测试应用程序中,我正在创建一个 GoogleCredential 实例:

var credential = 
            GoogleCredential.FromStream(new FileStream("privatekey.json", FileMode.Open, FileAccess.Read))
            .CreateScoped(Scopes);

如何设置我想模拟的用户? 使用 p12 私钥时,我可以执行以下操作:

var credential = new ServiceAccountCredential(
    new ServiceAccountCredential.Initializer("xxx@developer.gserviceaccount.com") //service Account id
    {
       Scopes = Scopes,
       User = "admin@xxx.com" //the user to be impersonated                    
    }.FromCertificate(new X509Certificate2(@"xxx.p12", "notasecret", X509KeyStorageFlags.Exportable)));

但是我如何使用 GoogleCredential 和 json privatkey 文件以“简单的方式”做到这一点?

亲切的问候

最佳答案

好的,我现在通过从 GoogleCredential 和内部类 DefaultCredentialProvider 复制代码来解决它

using (var fs = new FileStream("key.json", FileMode.Open, FileAccess.Read))
{
    var credentialParameters =
        NewtonsoftJsonSerializer.Instance.Deserialize<JsonCredentialParameters>(fs);
    if (credentialParameters.Type != "service_account" 
        || string.IsNullOrEmpty(credentialParameters.ClientEmail) 
        || string.IsNullOrEmpty(credentialParameters.PrivateKey))
            throw new InvalidOperationException("JSON data does not represent a valid service account credential.");
    return new ServiceAccountCredential(
        new ServiceAccountCredential.Initializer(credentialParameters.ClientEmail)
        {
            Scopes = Scopes,
            User = _adminUser //the user to be impersonated
        }.FromPrivateKey(credentialParameters.PrivateKey));
}

如果有人(可能是 peleyal)有更好的想法直接通过 GoogleCredential 进行操作,请随时给我提示;)

关于c# - 由 json 私钥文件(ServiceAccount)创建的 GoogleCredential - 如何将用户设置为模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38496919/

相关文章:

c# - 如何在不刷新整个页面的情况下获得刷新的表格?

c# - .NET enum.HasFlag() 错误?

javascript - Google 条形图采用全宽

oauth - 如何在没有 oAuth 身份验证的情况下连接到 Google Calendar API?

C# 从 float 变量中获取数字

c# - 大整数源代码

c# - 设置进度条超过 100% C#

c# - Long 来自字符列表 C#

.net - 单独程序集中的 ResourceDictionary

python - 导入错误 : cannot import name language in Google Cloud Language API