По какой-то причине следующий код дает несанкционированное исключение, может ли кто-нибудь сказать мне, что я делаю неправильно?Office 365 - многопользовательское приложение постоянно дает несанкционированный доступ
На скриншоте ниже вы можете найти содержание «theToken», который был получен через Office365 и сохраняется в базе данных (1 минуту до excecution)
Async Function CalendarDemo() As System.Threading.Tasks.Task(Of ActionResult)
Dim tokenData = UserTokenService.GetToken(HttpContext.User.Identity.Name)
Dim theToken = tokenData.ReadItems(0)
Dim myCalendars As List(Of ViewModels.Office365.MyCalendar) = New List(Of ViewModels.Office365.MyCalendar)
Try
Dim accessToken As Func(Of String) = Function() As String
Return theToken.AccessToken
End Function
Dim discClient As New DiscoveryClient(New Uri("https://api.office.com/discovery/v1.0/me/"), accessToken)
Dim dcr = Await discClient.DiscoverCapabilityAsync("Calendar") 'This is where the code breaks, the code worked in the past. Till i split up the authorization and the fetching of the Calendar
ViewBag.ResourceId = dcr.ServiceResourceId
Dim exClient As New OutlookServicesClient(dcr.ServiceEndpointUri, Function()
Return Helpers.Office365Helpers.ReturnStringAsAsync(theToken.AccessToken)
End Function)
Dim calendarResults = Await exClient.[Me].Events.ExecuteAsync()
Dim calenderResults = Await exClient.Me.Calendar.Events.ExecuteAsync()
Do
Dim calendars = calendarResults.CurrentPage
For Each calendar In calendars
Dim newCalendar = New ViewModels.Office365.MyCalendar(calendar)
myCalendars.Add(newCalendar)
Next
calendarResults = Await calendarResults.GetNextPageAsync()
Loop While calendarResults IsNot Nothing
Catch exception As AdalException
' handle token acquisition failure
If exception.ErrorCode = AdalError.FailedToAcquireTokenSilently Then
'authContext.TokenCache.Clear()
'Redirect naar login of refresh token
ViewBag.ErrorMessage = "AuthorizationRequired"
End If
Catch exception As DiscoveryFailedException
End Try
Return View(myCalendars)
End Function
Исключение составляет : «Исключение типа« Microsoft.Office365.Discovery.DiscoveryFailedException »было брошено». - и ErrorCode является «Несанкционированное»
Согласно ниже ответ, я изменил следующий код:
Dim exClient As New OutlookServicesClient(New Uri("https://outlook.office365.com/api/v1.0/"), Function()
Return Helpers.Office365Helpers.ReturnStringAsAsync(theToken.AccessToken)
End Function)
Dim calendarResults = Await exClient.[Me].Events.Take(10).ExecuteAsync()
Где мой помощник:
Public Module Office365Helpers
Public Async Function ReturnStringAsAsync(ToReturnString As String) As System.Threading.Tasks.Task(Of String)
Return Await System.Threading.Tasks.Task.Delay(1).ContinueWith(Function(dl) ToReturnString)
End Function
End Module
Но это не возвращает когда он загружается. Это похоже на вызов api в непрерывном цикле.
Identitical вопрос, но короче:
У меня есть Microsoft.IdentityModel.Clients.ActiveDirectory.TokenCache, как я могу запросить API Календаря Microsoft с использованием библиотек и vb.net, чтобы получить данные.
Обновлен мой вопрос, я изменил код, но он, похоже, не работает – NicoJuicy
Хорошо, вы можете попробовать начать учебник .NET на нашем сайте и сравнить. Я обновил свой ответ. –
У меня уже есть несколько образцов кода, но он, похоже, не работает должным образом. Учитывая, что у меня есть Microsoft.IdentityModel.Clients.ActiveDirectory.TokenCache (так AccessToken и RefreshToken), сохраненный в базе данных. Как я могу запросить API-интерфейс Outlook Outlook без вызова DiscoveryClient? – NicoJuicy