使用.NET中的Google.Apis.Analytics.v3库,我做一个的OAuth2认证的谷歌Analytics(分析)API,像这样:Google API:如何检查认证是否成功完成?
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方法之前,我应该如何验证身份验证是否成功完成?如果身份验证失败,我希望能够从我的数据存储中删除撤销令牌,然后再次尝试身份验证,请求用户权限。
您好,感谢您的解释。但是,我的情况稍有不同。我其实有一个try/catch,当用户点击取消时,它会处理这种情况。但是在我描述的场景中,用户已经在过去的某个时间进行了身份验证,现在管理员撤销了其中一个令牌,但不会从数据库中删除它们。当网站尝试再次连接到GA时,它将使用它在数据库中找到的吊销标记。 credential.Token只返回与我最初发送的相同的已吊销标记,并且不会引发错误。 HTTP://截屏。com/t/Eum96s3chP – SsjCosty
你的databasedatastore应该处理管理员没有完全删除刷新令牌 – DaImTo
正确...但数据存储如何知道令牌已被撤销?您可以通过调用URL(https://accounts.google.com/o/oauth2/revoke?token={token})来撤消令牌,但数据存储将如何检查令牌是否已被撤销? – SsjCosty