Where/How 存储或生成客户端机密?

Where/How to store or generate the Client Secrets?

我正在使用 C# .NET 和 YouTubeAPI-Nuget 包。

该项目是一个桌面应用程序 (Avalonia),我需要访问用户的 YouTube 频道(例如更改视频标题)。

我不明白我需要如何或在何处存储客户端机密,或者我是否可以生成它们,或者我将如何在用户无法访问我的客户端机密的情况下分发程序。

是否每个想要使用我的程序的用户都需要一个自己的客户端机密文件?如果是这样,我如何自动生成它? (因为我不想为每个想要使用它的用户手动生成客户端机密)

如果他们只需要一个客户端机密,那么我该如何分发它而不将纯文本文件放入安装文件夹?

我真的不知道也找不到任何关于它应该如何工作的信息。

I don't understand how or where I need to store the client secrets or if I can generate them or how I am going to distribute the program without users having access to my client secrets.

由于您有桌面应用程序,因此在编译时确保将其编译为应用程序的一部分,例如 clientsecret.json 作为文件与您的应用程序一起发送,例如 dll。它应该被编译到您的应用程序中并以这种方式分发。如果您想使用更多 OTT,您可以将其存储在服务器上和端点上,并让您的桌面应用程序在运行或安装时获取它并在本地存储数据。

Does every user who wants to use my program need an own client secrets file? If so, how do I autogenerate that? (because I don't want to manually generate client secrets for every user who wants to use it)

您的应用程序不应该有一个单一的客户端 ID 和客户端密码对,供您的所有用户使用。

And if they only need the one client secrets, then how do I distribute that without putting the file in plain text into the installation folder?

我还没有看到你的代码,但你真正需要的只是客户端 ID 和客户端密码本身作为常量存储在你的应用程序中的某个地方。您实际上并不需要文件本身。

但是...散列或加密代码中的字符串,因为在记事本中打开可执行文件可能会以明文形式公开字符串。最好使用字符串加密进行混淆...

好的,上面的答案是我的答案,但我想分享(用代码)我将如何按照他们所说的去做。

  1. 我的 CI 将获取我的客户端 ID 和密码并作为机密(我正在使用 Github 操作)。

  2. 我在代码中创建字符串常量:

private const string ClientId = "CLIENT_ID";
private const string ClientSecret = "CLIENT_SECRET";
  1. 让 CI 将这些代码行更改为实际的客户端 ID 和密码
private const string ClientId = "ACTUAL_CLIENT_ID";
private const string ClientSecret = "ACTUAL_CLIENT_SECRET";
  1. 让 CI 在 dotnet publish 之后混淆生成的 dll,这样反编译就更难了。 (我正在尝试让 ConfuserEx 工作)