如何配置为控制台应用程序使用的身份验证的网站?

时间:2016-11-03 05:36:26

标签: c# google-api google-oauth youtube-data-api google-api-dotnet-client

最终,我正在尝试代表已授权我的网站/应用程序的用户上传YouTube视频。

我有一个网站,用户授权该网站使用用户的YouTube凭据。然后,该网站会在用户授权后正确存储凭据(YouTube Data API v3)。问题是,这些凭证希望由服务器进程使用,出于所有目的,该进程将被视为控制台应用程序。

但是,在Google API管理器上向我的项目添加凭据时,我可以执行Web浏览器,Web服务器(和其他)或其他UI(Windows)"。但我不能同时做。我相信我需要两者,因为用户通过网站授权,但控制台进程使用凭据。

但即使我有上述答案,如何使用他们在示例中显示的示例代码将USER&#S; S凭据传递给控制台应用程序?

using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
        {
            credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                // This OAuth 2.0 access scope allows an application to upload files to the
                // authenticated user's YouTube channel, but doesn't allow other types of access.
                new[] { YouTubeService.Scope.YoutubeUpload },
                "user",
                CancellationToken.None
            );
        }

似乎此代码更多地用于在Windows文件系统上的某个位置存储凭据,以便稍后检索,如缓存。但我存储这些"授权"数据库中的值已经存在,并希望检索它们并代表该用户进行操作。

我希望这是有道理的,如果它絮絮叨叨,我道歉。

1 个答案:

答案 0 :(得分:2)

<强>背景

默认情况下,Google .NET客户端库会将用户的凭据存储在%AppData%您拥有的字段中的用户&#34; user&#34;是它存储它的方式。

示例:

UserCredential credential;
using (var stream = new FileStream(clientSecretsJsonFilePath
                                   ,FileMode.Open
                                   ,FileAccess.Read))
{   
    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets,
        new[] { DriveService.Scope.Drive,  DriveService.Scope.DriveFile },
        "LookIAmAUniqueUser",
        CancellationToken.None,
        new FileDataStore("Drive.Auth.Store")                               
    ).Result;
}

假设用户在身份验证请求屏幕上单击“接受”,将在该目录中创建一个具有以下结构的新文件:

Google.Apis.Auth.OAuth2.Responses.TokenResponse-LookIAmAUniqueUser.TokenResponse-LookIAmAUniqueUser

每个用户都有自己的文件,您可以通过更改&#34; LookIAmAUniqueUser&#34;来更改用户。值。

解决方案一:

以不同方式识别您的用户,以便您知道自己正在加载我。只需更改&#34;用户&#34;参数,它将加载所需的参数或询问用户是否无法找到它。

解决方案二:

默认情况下,图书馆会使用FileDataStore,这就是为什么我在我的网站上使用它并且你不会拥有它。如果您正在其他地方存储凭据,请在数据库中说明刷新令牌以及您的用户信息。您可以创建自己的IDataStore实现,从那里加载凭据。

我在FileDataStore上的文章可能会帮助您了解它的作用。 Google .NET – FileDataStore demystified抱歉,我没有时间创建一篇关于创建IDataStore实现的文章,但是我可能会有一两个实例,这取决于你存储这些凭据的位置