Google API:如何检查身份验证是否成功完成?

时间:2015-05-11 13:15:43

标签: c# .net google-analytics-api google-api-dotnet-client google-oauth2

在.NET中使用Google.Apis.Analytics.v3库,我正在对Google AnalyticsAPI进行OAuth2身份验证,如下所示:

string[] scopes = new string[] { AnalyticsService.Scope.Analytics,  // view and manage your analytics data
                                             AnalyticsService.Scope.AnalyticsEdit,  // edit management actives
                                             AnalyticsService.Scope.AnalyticsManageUsers,   // manage users
                                             AnalyticsService.Scope.AnalyticsReadonly};     // View analytics data

UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                                new ClientSecrets { ClientId = clientId, ClientSecret = clientSecret }
                                 , scopes
                                 , userName
                                 , CancellationToken.None
                                 , new DatabaseDataStore("Analytics")).Result;

AnalyticsService service = new AnalyticsService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = "Masterpiece"
});

问题在于,最后,我不知道身份验证是否成功,因为我没有看到任何方式从此实现获取任何类型的消息。通常情况下,这很好用,我可以继续查询API。但是,如果我撤销我为此用户名存储的令牌,那么此实现将不会告诉我该服务未经过身份验证,并且当我尝试查询API之后我收到错误。

在开始访问API方法之前,我应该如何验证身份验证是否成功完成?如果身份验证失败,我希望能够从我的数据存储中删除撤销令牌,并再次尝试身份验证,请求用户权限。

1 个答案:

答案 0 :(得分:1)

实际上有一些事情可能会出错,你应该考虑。

  1. 用户可以点击接受。好在这里没问题,您可以查看credential.Token.AccessToken以查看您是否获得了访问令牌,并且可以访问该API。
  2. 用户不会点击接受,而是点击cancle。在这种情况下,抛出异常。这就是为什么上面的代码可能应该在try catch中。 [System.AggregateException] InnerException = {"错误:\" access_denied \",描述:\" \",Uri:\" \&#34 ;"}
  3. 第三个选项是用户不执行任何操作,在这种情况下,您的代码将等待用户的结果。 (Bug report:仍在努力解决这个问题)
  4. 现在您担心的是,如果删除DatabaseDataStore中的用户将会发生什么。那么应该发生的事情就像有一个新用户一样。如果您在DatabaseDataStore中的代码是正确的,系统将检测到它没有此用户,并将再次提示用户进行身份验证。客户端库应该为您执行此操作,或者更确切地说是DatabaseDataStore应该执行此操作。我建议用user和FileDataStore测试它是如何工作的。如果您从系统中删除用户时当前没有提示您进行新的身份验证,那么您的DatabaseDataStore就会出现问题。

    <强>推荐。

    1. 请求所有这些范围仅请求您所需的内容。
    2. 如果您没有获得身份验证,请将您的代码放入try catch中,这将导致您需要捕获它。
    3. 如果您真的担心,请在AccessToken上进行测试。
    4. enter image description here