3

我正在为 gData 和 Drive C# API 使用两个单独的 Oauth2 实现,分别将令牌信息存储在 OAuth2Parameters 和 AuthorizationState 中。我能够刷新令牌并将它们用于必要的 API 调用。我正在寻找一种方法来使用它来获取用户的信息,主要是电子邮件地址或域。

我尝试按照Retrieve OAuth 2.0 Credentials的演示进行操作,但我在此处遇到类似于 rapsalands 问题的编译错误,说

can't convert from
'Google.Apis.Authentication.OAuth2.OAuth2Authenticator<
Google.Apis.Authenticatio‌​n.OAuth2.DotNetOpenAuth.NativeApplicationClient>'
to 'Google.Apis.Services.BaseClientService.Initializer'.

我刚刚获取了最新版本的Oauth2 api dll,所以我不认为就是这样。

我看到的所有其他代码 示例都提到了使用 UserInfo API,但我找不到任何类型的 C#/dotnet api 可以在不直接执行 GET/POST 请求的情况下使用它。

有没有办法使用我已经拥有的一个 C# api 的令牌来获取此信息,而无需发出新的 HTTP 请求?

4

2 回答 2

8

您需要使用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

于 2013-04-23T11:28:09.473 回答
2

对于上面@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();
                }
于 2016-12-28T10:41:21.740 回答