В настоящее время я авторизуюсь через 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\]
- Я считаю, что это моя первая проблема, я не хочу, чтобы каждый пользователь авторизовался на веб-сайте, это должно происходить на бэкэнде, с чем я борюсь.
Домой/Обратный вызов с доступом для авторизации код, который я сохраняю в сеансе и в базе данных:
Код: Выделить всё
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");
}
Код: Выделить всё
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;
Подробнее здесь: https://stackoverflow.com/questions/793 ... t-core-mvc
Мобильная версия