Токен обновления API библиотеки Google Фото ASP.NET Core MVCC#

Место общения программистов C#
Ответить
Anonymous
 Токен обновления API библиотеки Google Фото ASP.NET Core MVC

Сообщение Anonymous »

Я пытаюсь выяснить, есть ли способ получить токен обновления для API библиотеки Google Фото. Похоже, что библиотека Google Фото не поддерживает токены обновления, поскольку фотографии представляют собой пользовательские данные, однако я чувствую, что должен быть способ, чтобы это работало.
В настоящее время я авторизуюсь через URL-адрес OAuth 2 я затем получаю токен доступа, который, наконец, используется для вызова API, который возвращает фотографии в формате JSON. Но со временем срок действия токена доступа истекает, и тогда мне нужно снова следовать потоку аутентификации. Я также попробовал маршрут учетной записи службы, но, похоже, это та же проблема, что и с токенами обновления: невозможно использовать учетную запись службы, поскольку библиотека фотографий ее не поддерживает.
Мой код выглядит так:

[*]Создаем URL-адрес авторизации, который будет выглядеть так:
https://accounts.google.com/o/oauth2/v2 ... client_id=\[CLIENT_ID\]&redirect_uri=\[REDIRECT_URI\]&scope=\[PhotosLibraryService.Scope.PhotoslibraryReadonly \]&login_hint=\[EMAIL\]
  • Я считаю, что это моя первая проблема, я не хочу, чтобы каждый пользователь авторизовался на веб-сайте, это должно происходить на бэкэнде, с чем я борюсь.
[*]Затем он будет перенаправлен на мой URL-адрес обратного вызова:

Домой/Обратный вызов с доступом для авторизации код, который я сохраняю в сеансе и в базе данных:

Код: Выделить всё

public async Task Callback(string code, string error)
{
if (!string.IsNullOrEmpty(error))
{
return Content($"Error: {error}");
}

if (string.IsNullOrEmpty(code))
{
return Content("Authorization code not received.");
}

var tokenResponse = await ExchangeCodeForTokenAsync(code);

HttpContext.Session.SetString("AccessToken", tokenResponse.AccessToken);

return RedirectToAction("Index", "Home");
}
[*]А затем он возвращается к моему методу Home/Index, чтобы продолжить получение фотографий и поместить их в ViewBag:

Код: Выделить всё

var accessToken = HttpContext.Session.GetString("AccessToken");

if (!string.IsNullOrEmpty(accessToken))
{
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://photoslibrary.googleapis.com/v1/mediaItems:search?pageSize=100");
request.Headers.Add("Authorization", "Bearer " + accessToken);
var content = new StringContent("", null, "text/plain");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();

responseString = await response.Content.ReadAsStringAsync();

//saves the Json String in the database to be fecthed later
_lookupTableModelService.InsertLookupTable("GooglePhotosJson", responseString);
}

Код: Выделить всё

var responseJson = JsonDocument.Parse(responseString);

var photoDetails = new List();

if (responseJson.RootElement.TryGetProperty("mediaItems", out var mediaItems))
{
foreach (var item in mediaItems.EnumerateArray())
{
if (item.TryGetProperty("baseUrl", out var baseUrl) &&
item.TryGetProperty("mediaMetadata", out var mediaMetadata) &&
mediaMetadata.TryGetProperty("width", out var width) &&
mediaMetadata.TryGetProperty("height", out var height))
{
photoDetails.Add(new Dictionary
{
{ "baseUrl", baseUrl.GetString() },
{ "width", width.GetString() },
{ "height", height.GetString() }
});
}
}
}

ViewBag.PhotoDetails = photoDetails;
[*]Тогда я просто использую PhotoDetails внутри моего Index.cshtml



Подробнее здесь: https://stackoverflow.com/questions/793 ... t-core-mvc
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»