验证 Google Contacts v3(我不能使用我的 Google 日历令牌)吗?
Authenticating Google Contacts v3 (can't I use my Google Calendar token)?
我看过一些关于这个问题的话题,但也许我忽略了一些东西。
这是我当前的 VB 日历验证代码:
Private Function DoAuthentication(ByRef rStrToken As String) As Boolean
Dim credential As UserCredential
Dim Secrets = New ClientSecrets()
Secrets.ClientId = m_strClientID
Secrets.ClientSecret = m_strClientSecret
m_Scopes.Add(CalendarService.Scope.Calendar)
Try
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, m_Scopes,
"user", CancellationToken.None,
New FileDataStore("xxxxx.Calendar.Application")).Result()
' Create the calendar service using an initializer instance
Dim initializer As New BaseClientService.Initializer()
initializer.HttpClientInitializer = credential
initializer.ApplicationName = "Public Talks And Meeting Schedule Assistant Calendar"
m_Service = New CalendarService(initializer)
rStrToken = credential.Token.AccessToken.ToString()
Catch ex As Exception
' We encountered some kind of problem, perhaps they have not yet authenticated?
' Can we isolate that as the exception?
Return False
End Try
Return True
End Function
我现在还想使用 Google 联系人数据。所以我修改了上面的方法来包含这个范围:
m_Scopes.Add("https://www.google.com/m8/feeds/")
然后我尝试使用它:
If (DoAuthentication(strToken)) Then
Dim settings As New RequestSettings("xx", strToken)
settings.AutoPaging = True
iResult = RESULT_SUCCESS_OAUTH
m_ContactsRequest = New ContactsRequest(settings)
Dim f As Feed(Of Contact) = m_ContactsRequest.GetContacts()
For Each oContact As Contact In f.Entries
Console.WriteLine(oContact.Name.ToString)
Next
Else
Return RESULT_FAILED_OAUTH
End If
但它引发了一个异常:401 Unauthorized。
我做错了什么?谢谢。
更新
我找到了这个网页:http://www.daimto.com/google-contacts-with-c/
所以我尝试实现其中的一些:
私有函数 DoAuthentication(ByRef rStrToken As String, ByRef rParameters As OAuth2Parameters) As Boolean
Dim credential 作为 UserCredential
昏暗的秘密 = 新的 ClientSecrets()
Secrets.ClientId = m_strClientID
Secrets.ClientSecret = m_strClientSecret
m_Scopes.Add(CalendarService.Scope.Calendar)
m_Scopes.Add("https://www.google.com/m8/feeds/")
Try
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, m_Scopes,
"user", CancellationToken.None,
New FileDataStore("xx.Calendar.Application")).Result()
' Create the calendar service using an initializer instance
Dim initializer As New BaseClientService.Initializer()
initializer.HttpClientInitializer = credential
initializer.ApplicationName = "Public Talks And Meeting Schedule Assistant Calendar"
m_Service = New CalendarService(initializer)
rStrToken = credential.Token.AccessToken.ToString()
rParameters.AccessToken = credential.Token.AccessToken
rParameters.RefreshToken = credential.Token.RefreshToken
Catch ex As Exception
' We encountered some kind of problem, perhaps they have not yet authenticated?
' Can we isolate that as the exception?
Return False
End Try
代码:
Dim parameters As New OAuth2Parameters
If (DoAuthentication(strToken, parameters)) Then
Dim settings As New RequestSettings("GoogleCalIF", parameters)
settings.AutoPaging = True
iResult = RESULT_SUCCESS_OAUTH
m_ContactsRequest = New ContactsRequest(settings)
Dim f As Feed(Of Contact) = m_ContactsRequest.GetContacts()
For Each oContact As Contact In f.Entries
Console.WriteLine(oContact.Name.ToString)
Next
Else
Return RESULT_FAILED_OAUTH
End If
Return True
End Function
但我仍然收到 401 异常。我已将联系人 API 正确添加到我的 Google 控制台。困惑。
恐怕我头疼。我无法解决这个 401 Unathorized 问题。
我成功了!有几件事我必须做。
步骤 1
看来我需要范围是一行字符串,中间有一个 space。所以我将身份验证方法更改为:
Private Function DoAuthentication(ByRef rStrToken As String, ByRef rParameters As OAuth2Parameters) As Boolean
Dim credential As UserCredential
Dim Secrets = New ClientSecrets()
Secrets.ClientId = m_strClientID
Secrets.ClientSecret = m_strClientSecret
m_Scopes.Add("https://www.googleapis.com/auth/calendar https://www.google.com/m8/feeds/")
Try
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, m_Scopes,
"user", CancellationToken.None,
New FileDataStore("PublicTalkSoftware.Calendar.Application")).Result()
' Create the calendar service using an initializer instance
Dim initializer As New BaseClientService.Initializer()
initializer.HttpClientInitializer = credential
initializer.ApplicationName = "Public Talks And Meeting Schedule Assistant Calendar"
m_Service = New CalendarService(initializer)
rStrToken = credential.Token.AccessToken.ToString()
rParameters.AccessToken = credential.Token.AccessToken
rParameters.RefreshToken = credential.Token.RefreshToken
Catch ex As Exception
' We encountered some kind of problem, perhaps they have not yet authenticated?
' Can we isolate that as the exception?
Return False
End Try
Return True
End Function
我注释掉了CalendarService.Scope.Calendar这一行,并使用了文字。不确定那是否是最好的做法。
步骤 2
在上述方法中,我传入了一个 OAuth2Parameters 对象并填充了几个条目。
步骤 3
调用代码是这样的:
Dim m_ContactsRequest As ContactsRequest
Dim strToken As String = ""
Dim iResult As Integer = 0
Dim parameters As New OAuth2Parameters
If (DoAuthentication(strToken, parameters)) Then
iResult = RESULT_SUCCESS_OAUTH
Else
Return RESULT_FAILED_OAUTH
End If
Try
Dim settings As New RequestSettings("XX", parameters)
m_ContactsRequest = New ContactsRequest(settings)
Dim f As Feed(Of Contact) = m_ContactsRequest.GetContacts()
For Each oContact As Contact In f.Entries
Console.WriteLine(oContact.Name.FullName.ToString)
Next
Catch ex As Exception
' We encountered some kind of problem, perhaps they have not yet authenticated?
' Can we isolate that as the exception?
Return False
End Try
步骤 4
因为我已经在 PC 上有了一个访问令牌,所以我必须 撤销 它,这样我也可以访问联系人,而不仅仅是日历服务。
我看过一些关于这个问题的话题,但也许我忽略了一些东西。
这是我当前的 VB 日历验证代码:
Private Function DoAuthentication(ByRef rStrToken As String) As Boolean
Dim credential As UserCredential
Dim Secrets = New ClientSecrets()
Secrets.ClientId = m_strClientID
Secrets.ClientSecret = m_strClientSecret
m_Scopes.Add(CalendarService.Scope.Calendar)
Try
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, m_Scopes,
"user", CancellationToken.None,
New FileDataStore("xxxxx.Calendar.Application")).Result()
' Create the calendar service using an initializer instance
Dim initializer As New BaseClientService.Initializer()
initializer.HttpClientInitializer = credential
initializer.ApplicationName = "Public Talks And Meeting Schedule Assistant Calendar"
m_Service = New CalendarService(initializer)
rStrToken = credential.Token.AccessToken.ToString()
Catch ex As Exception
' We encountered some kind of problem, perhaps they have not yet authenticated?
' Can we isolate that as the exception?
Return False
End Try
Return True
End Function
我现在还想使用 Google 联系人数据。所以我修改了上面的方法来包含这个范围:
m_Scopes.Add("https://www.google.com/m8/feeds/")
然后我尝试使用它:
If (DoAuthentication(strToken)) Then
Dim settings As New RequestSettings("xx", strToken)
settings.AutoPaging = True
iResult = RESULT_SUCCESS_OAUTH
m_ContactsRequest = New ContactsRequest(settings)
Dim f As Feed(Of Contact) = m_ContactsRequest.GetContacts()
For Each oContact As Contact In f.Entries
Console.WriteLine(oContact.Name.ToString)
Next
Else
Return RESULT_FAILED_OAUTH
End If
但它引发了一个异常:401 Unauthorized。
我做错了什么?谢谢。
更新
我找到了这个网页:http://www.daimto.com/google-contacts-with-c/
所以我尝试实现其中的一些:
私有函数 DoAuthentication(ByRef rStrToken As String, ByRef rParameters As OAuth2Parameters) As Boolean Dim credential 作为 UserCredential 昏暗的秘密 = 新的 ClientSecrets() Secrets.ClientId = m_strClientID Secrets.ClientSecret = m_strClientSecret m_Scopes.Add(CalendarService.Scope.Calendar) m_Scopes.Add("https://www.google.com/m8/feeds/")
Try
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, m_Scopes,
"user", CancellationToken.None,
New FileDataStore("xx.Calendar.Application")).Result()
' Create the calendar service using an initializer instance
Dim initializer As New BaseClientService.Initializer()
initializer.HttpClientInitializer = credential
initializer.ApplicationName = "Public Talks And Meeting Schedule Assistant Calendar"
m_Service = New CalendarService(initializer)
rStrToken = credential.Token.AccessToken.ToString()
rParameters.AccessToken = credential.Token.AccessToken
rParameters.RefreshToken = credential.Token.RefreshToken
Catch ex As Exception
' We encountered some kind of problem, perhaps they have not yet authenticated?
' Can we isolate that as the exception?
Return False
End Try
代码:
Dim parameters As New OAuth2Parameters
If (DoAuthentication(strToken, parameters)) Then
Dim settings As New RequestSettings("GoogleCalIF", parameters)
settings.AutoPaging = True
iResult = RESULT_SUCCESS_OAUTH
m_ContactsRequest = New ContactsRequest(settings)
Dim f As Feed(Of Contact) = m_ContactsRequest.GetContacts()
For Each oContact As Contact In f.Entries
Console.WriteLine(oContact.Name.ToString)
Next
Else
Return RESULT_FAILED_OAUTH
End If
Return True
End Function
但我仍然收到 401 异常。我已将联系人 API 正确添加到我的 Google 控制台。困惑。
恐怕我头疼。我无法解决这个 401 Unathorized 问题。
我成功了!有几件事我必须做。
步骤 1
看来我需要范围是一行字符串,中间有一个 space。所以我将身份验证方法更改为:
Private Function DoAuthentication(ByRef rStrToken As String, ByRef rParameters As OAuth2Parameters) As Boolean
Dim credential As UserCredential
Dim Secrets = New ClientSecrets()
Secrets.ClientId = m_strClientID
Secrets.ClientSecret = m_strClientSecret
m_Scopes.Add("https://www.googleapis.com/auth/calendar https://www.google.com/m8/feeds/")
Try
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, m_Scopes,
"user", CancellationToken.None,
New FileDataStore("PublicTalkSoftware.Calendar.Application")).Result()
' Create the calendar service using an initializer instance
Dim initializer As New BaseClientService.Initializer()
initializer.HttpClientInitializer = credential
initializer.ApplicationName = "Public Talks And Meeting Schedule Assistant Calendar"
m_Service = New CalendarService(initializer)
rStrToken = credential.Token.AccessToken.ToString()
rParameters.AccessToken = credential.Token.AccessToken
rParameters.RefreshToken = credential.Token.RefreshToken
Catch ex As Exception
' We encountered some kind of problem, perhaps they have not yet authenticated?
' Can we isolate that as the exception?
Return False
End Try
Return True
End Function
我注释掉了CalendarService.Scope.Calendar这一行,并使用了文字。不确定那是否是最好的做法。
步骤 2
在上述方法中,我传入了一个 OAuth2Parameters 对象并填充了几个条目。
步骤 3
调用代码是这样的:
Dim m_ContactsRequest As ContactsRequest
Dim strToken As String = ""
Dim iResult As Integer = 0
Dim parameters As New OAuth2Parameters
If (DoAuthentication(strToken, parameters)) Then
iResult = RESULT_SUCCESS_OAUTH
Else
Return RESULT_FAILED_OAUTH
End If
Try
Dim settings As New RequestSettings("XX", parameters)
m_ContactsRequest = New ContactsRequest(settings)
Dim f As Feed(Of Contact) = m_ContactsRequest.GetContacts()
For Each oContact As Contact In f.Entries
Console.WriteLine(oContact.Name.FullName.ToString)
Next
Catch ex As Exception
' We encountered some kind of problem, perhaps they have not yet authenticated?
' Can we isolate that as the exception?
Return False
End Try
步骤 4
因为我已经在 PC 上有了一个访问令牌,所以我必须 撤销 它,这样我也可以访问联系人,而不仅仅是日历服务。