我的.NET系统中有一个模块,用于管理多个用户的Google日历,这些模块基于他们几天前已经过折旧的V2 API编写。
我的问题是,如何访问和管理多个用户日历?与V2 API一样,我们只需传入UserID和Password即可访问资源。但是在V3中,使用了OAuth2。我设法一次为一个用户进行身份验证。如何在此之后访问其他用户日历? (例如:logut user1并再次使用user2登录?)。到目前为止,我找不到任何相关的例子。
Sub Main()
Dim secret As New ClientSecrets
secret.ClientId = "MyClientID.apps.googleusercontent.com"
secret.ClientSecret = "MyClientSecret"
Dim init As New Flows.AuthorizationCodeFlow.Initializer("https://accounts.google.com/o/oauth2/auth", "https://accounts.google.com/o/oauth2/token")
init.ClientSecrets = secret
Dim flow As New Flows.AuthorizationCodeFlow(init)
Dim token As Responses.TokenResponse = flow.LoadTokenAsync("user1@gmail.com", CancellationToken.None).Result
Dim credential As New UserCredential(flow, "user1@gmail.com", token)
Try
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(secret, {CalendarService.Scope.Calendar}, "user", CancellationToken.None, New FileDataStore("CAS.GoogleConnector")).Result
Catch ex As Exception
MsgBox(ex.Message)
End Try
' Create the calendar service using an initializer instance
Dim initializer As New BaseClientService.Initializer()
initializer.HttpClientInitializer = credential
initializer.ApplicationName = "Clinic Assist"
Dim service As CalendarService
service = New CalendarService(initializer)
Dim a As CalendarsResource.GetRequest = service.Calendars.Get("user1@gmail.com")
a.Execute()
Console.WriteLine("Press any key to continue...")
Dim key As ConsoleKeyInfo = Console.ReadKey
If key.Key = ConsoleKey.N Then
NewEvent(service)
ElseIf key.Key = ConsoleKey.D Then
DeleteEvent(service)
ElseIf key.Key = ConsoleKey.C Then
NewCalendar(service)
End If
End Sub
Private Sub NewEvent(service As CalendarService)
Dim startDateTime, endDateTime As New Data.EventDateTime
startDateTime.DateTime = "2014-12-01T16:00:00"
endDateTime.DateTime = "2014-12-01T17:00:00"
Dim eventData As New Data.Event
With eventData
.Start = startDateTime
.End = endDateTime
.Location = "ALocation"
.Summary = "TRY"
End With
Try
Dim insertRequest As InsertRequest = service.Events.Insert(eventData, "user1@gmail.com")
insertRequest.Execute()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
我尝试从" user1@gmail.com"更改userId;到" user2@gmail.com"它似乎也访问了user1日历。感谢是否有人可以帮助解决这个问题。
答案 0 :(得分:0)
如果所有用户都在单个域中,您可以使用Service Accounts。服务帐户属于您的应用程序,而不是单个最终用户。您的应用程序代表服务帐户调用Google API,因此用户不会直接参与。
如果用户不在同一个域中,则需要为应用程序中的每个用户存储凭据。这是帮助您的link。