我已经为gData和Drive C#API两个单独的Oauth2实现,分别在OAuth2Parameters和AuthorizationState中存储令牌信息。我能够刷新令牌并将其用于必要的API调用。我正在寻找一种方法来获取用户的信息,主要是电子邮件地址或域名。
我尝试了Retrieve OAuth 2.0 Credentials的演示,但我收到类似于rapsalands'的编译错误。问题here,说出来
can't convert from
'Google.Apis.Authentication.OAuth2.OAuth2Authenticator<
Google.Apis.Authentication.OAuth2.DotNetOpenAuth.NativeApplicationClient>'
to 'Google.Apis.Services.BaseClientService.Initializer'.
我刚刚抓住Oauth2 api dlls的最新版本,所以我不会想到它。
所有其他code samples我看到使用UserInfo API提及,但我无法找到任何可以使用它的C#/ dotnet api而不是简单地做直接的GET / POST请求。
有没有办法使用我已经拥有的一个C#apis的令牌获取此信息而不会发出新的HTTP请求?
答案 0 :(得分:6)
您需要使用Oauth2Service
来检索有关用户的信息。
Oauth2Service userInfoService = new Oauth2Service(credentials);
Userinfo userInfo = userInfoService.Userinfo.Get().Fetch();
Oauth2Service
位于以下库中:https://code.google.com/p/google-api-dotnet-client/wiki/APIs#Google_OAuth2_API
答案 1 :(得分:1)
对于@ user990635上面的问题。虽然问题有点过时,但以下内容可能对某人有所帮助。该代码使用Google.Apis.Auth.OAuth2版本
var credentials =
await GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets {ClientId = clientID, ClientSecret = clientSecret},
new[] {"openid", "email"}, "user", CancellationToken.None);
if (credentials != null)
{
var oauthSerivce =
new Oauth2Service(new BaseClientService.Initializer {HttpClientInitializer = credentials});
UserInfo = await oauthSerivce.Userinfo.Get().ExecuteAsync();
}