在.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方法之前,我应该如何验证身份验证是否成功完成?如果身份验证失败,我希望能够从我的数据存储中删除撤销令牌,并再次尝试身份验证,请求用户权限。
答案 0 :(得分:1)
实际上有一些事情可能会出错,你应该考虑。
credential.Token.AccessToken
以查看您是否获得了访问令牌,并且可以访问该API。现在您担心的是,如果删除DatabaseDataStore中的用户将会发生什么。那么应该发生的事情就像有一个新用户一样。如果您在DatabaseDataStore中的代码是正确的,系统将检测到它没有此用户,并将再次提示用户进行身份验证。客户端库应该为您执行此操作,或者更确切地说是DatabaseDataStore应该执行此操作。我建议用user和FileDataStore测试它是如何工作的。如果您从系统中删除用户时当前没有提示您进行新的身份验证,那么您的DatabaseDataStore就会出现问题。
<强>推荐。强>