Ren*_*Dev 7 .net c# google-api google-api-dotnet-client
刚开始使用Google Apis.在我的Google Cloud Platform帐户中,我为域范围委派创建了一个服务帐户.我为此服务帐户保存了json格式的私钥文件.
在我的测试应用程序中,我正在创建一个GoogleCredential实例:
var credential =
GoogleCredential.FromStream(new FileStream("privatekey.json", FileMode.Open, FileAccess.Read))
.CreateScoped(Scopes);
Run Code Online (Sandbox Code Playgroud)
如何设置我想要冒充的用户?使用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)));
Run Code Online (Sandbox Code Playgroud)
但是,我如何使用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));
}
Run Code Online (Sandbox Code Playgroud)
如果有人(也许是peleyal)有更好的想法直接通过GoogleCredential这样做,请随时给我一个提示;)
下面是 Javascript,但我确信你可以在 #C 中做类似的事情。
我使用 client_id 和 client_secret 方法
function tokenRefresh(){
var uri = "https://accounts.google.com/o/oauth2/token";
var payload =
{
'client_id' : 'XXXXXXXX.apps.googleusercontent.com',
'client_secret' : 'XXXXXXXX',
'grant_type' : 'refresh_token',
'content_type' : 'application/x-www-form-urlencoded',
'refresh_token' : 'XXXXXXXX'
};
var options =
{ "method" : "POST",
"muteHttpExceptions" : false,
"payload" : payload
};
var response = UrlFetchApp.fetch(uri, options),
response_json = JSON.parse(response.getContentText()),
token = response_json.access_token;
return(token);
}
Run Code Online (Sandbox Code Playgroud)
假设您拥有正确的范围权限,这每次都会给您一个新令牌。
每次要访问 API 时,您都需要附加 access_key(而不是某些 Google 文档指示的“key=”)
有关如何获取范围的更多信息,请随时查看我写的内容:http ://thisistony.com/blog/googleanalytics/google-analytics-api-oauth-ever-wondered-how-to-get-the-access_token /
| 归档时间: |
|
| 查看次数: |
4682 次 |
| 最近记录: |