Я пытаюсь настроить класс, который может обернуться вокруг .NET Google API, чтобы я мог использовать токен доступа, который я ранее получил, для доступа к Google Drive пользователя.На данный момент я просто пытаюсь заставить его работать, чтобы мне не требовался токен обновления (подробнее об этом через секунду).Конечная цель состоит в том, чтобы кто-то прошел через веб-страницу, которую я настроил для аутентификации, где я получаю и токен доступа, и токен обновления, напрямую обращаясь к Google Rest API (который я храню в базе данных).Затем они могут запросить загрузку / загрузку файлов на свой диск на другой странице, которая сначала получит соответствующую информацию из базы данных, а затем использует библиотеку API .NET Google при доступе к диску.
Однако, когда я пытаюсь получить доступ к их диску, я получаю следующую ошибку:
Срок действия маркера доступа истек и его невозможно обновить.Ошибки: ошибка обновления, ошибка обновления, ошибка обновления
Я знаю, что токен доступа действителен, потому что я получаю его только несколькими секундами ранее во время тестирования.Вот мой код для настройки службы дисков:
' NOTE: Code altered for brevity
Public Sub Initialize(accessToken As String)
' Set up the client secret information based on the default constants
Dim clientSecrets As New ClientSecrets()
clientSecrets.ClientId = DEFAULT_CLIENT_ID
clientSecrets.ClientSecret = DEFAULT_CLIENT_SECRET
' Set up a token based on the token data we got
' NOTE: Is it OK to leave some strings as NULL?
Dim token As New Responses.TokenResponse()
token.AccessToken = accessToken
token.RefreshToken = ""
token.TokenType = "Bearer"
token.IssuedUtc = DateTime.Now
token.ExpiresInSeconds = 3600
token.Scope = "drive"
token.IdToken = ""
' Set up a flow for the user credential
Dim init As New GoogleAuthorizationCodeFlow.Initializer()
init.ClientSecrets = clientSecrets
init.Scopes = New String() {DriveService.Scope.Drive}
init.Clock = Google.Apis.Util.SystemClock.Default
' Set up everything else and initialize the service
Dim baseInit As New BaseClientService.Initializer()
baseInit.HttpClientInitializer = New UserCredential(New GoogleAuthorizationCodeFlow(init), "user", token)
baseInit.ApplicationName = APP_NAME
_service = New DriveService(baseInit)
End Sub
Вскоре после этого я использую следующий код для запроса папки, чтобы проверить, существует она или нет.
Private Function GetDriveFolder(folderPath As String, ByRef folderIds As String(), Optional createMissingFolders As Boolean = False, Optional parentFolderId As String = "root") As Data.File
Dim creatingFolderPath As Boolean = False
Dim currentFolder As Data.File = Nothing
Dim folderPathSplit As String() = folderPath.Replace("/", "\").Trim("\").Split("\")
Dim folderIdList As New List(Of String)
folderIds = {}
' Loop through each folder in the path and seek each out until we reach the end
For x As Integer = 0 To folderPathSplit.Length - 1
Dim result As FileList = Nothing
If Not creatingFolderPath Then
' Build a list request which we will use to seek out the next folder
Dim request As FilesResource.ListRequest = _service.Files.List()
request.Q = "mimeType='application/vnd.google-apps.folder' and name='" & folderPathSplit(x) & "'"
If currentFolder Is Nothing Then
request.Q &= " and '" & EscapeDriveValue(parentFolderId) & "' in parents"
Else
request.Q &= " and '" & EscapeDriveValue(currentFolder.Id) & "' in parents"
End If
request.Spaces = "drive"
request.Fields = "files(id, name)"
' Execute the search, we should only get a single item back
' NOTE: Error thrown on this request
result = request.Execute()
End If
' So on.....
Итак, я сейчас пытаюсь заставить его работать только с токеном доступа, потому что, если он обновится, мне нужно будет знать, чтобы я мог обновить свою базу данных.Однако, если я включаю маркер обновления, я получаю следующую ошибку:
Ошибка: "unauthorized_client", Описание: "Unauthorized", Uri: ""
IЯ предполагаю, что это как-то связано с тем, как я настроил свое приложение через Dev Console, но если я аутентифицируюсь через Google API Library, запустив браузер, чтобы получить мои учетные данные, все работает нормально.Итак, я действительно не уверен, куда идти отсюда, так как я не нашел ни у кого подобных проблем, и в руководствах не описывается указание вашего собственного токена доступа.
Кроме того, в качестве краткого примечания этоURL, который я использую при аутентификации пользователя:
String.Format("https://accounts.google.com/o/oauth2/v2/auth?client_id={0}&state={1}&redirect_uri={2}&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&access_type=offline&include_granted_scopes=true&prompt=select_account%20consent&response_type=code", GOOGLEAPI_CLIENTID, validateState, redirectUri)
Спасибо за помощь!