Я запускаю процесс без интерфейса, который извлекает загруженные видео с youtube. На машине разработки он аутентифицируется от имени пользователя, и он работает.Authenticate Youtube API для рабочего процесса C#
Проблема заключается в том, что процесс запускается на сервере: окно браузера не запускает для пользователя возможность использовать его учетную запись (для этого требуется только один раз).
Средство просмотра событий не содержит никаких ошибок. Учетные записи служб, похоже, не работают с youtube, с ключом API слишком меньше разрешений и клятва - единственный способ аутентификации и трансляции видео. Или я ошибаюсь?
Итак, вопрос: как запустить службу как одного пользователя и получить его видео без пользовательского интерфейса?
private async Task Run()
{
try
{
UserCredential credential;
using (var stream = new FileStream(StartPath + "\\client_secrets.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.YoutubeReadonly, YouTubeService.Scope.Youtube },
"user",
CancellationToken.None,
new FileDataStore("Store")
);
}
var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = this.GetType().ToString()
});
....
}
Я также попытался:
String serviceAccountEmail = "e-mail";
var certificate = new X509Certificate2(HostingEnvironment.MapPath("~/Content/key.p12"), "notasecret", X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = new[] { YouTubeService.Scope.Youtube, YouTubeService.Scope.YoutubepartnerChannelAudit, YouTubeService.Scope.YoutubeUpload }
}.FromCertificate(certificate));
var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "api",
});