所以我创建了一个程序,第一个是主应用程序,第二个是管理应用程序。
管理应用程序是自定义主应用程序并设置它。这款应用使用github作为存储,因为它既安全又免费。所以在管理应用中,你输入你的github个人访问令牌,所以主应用可以访问repo(存储)。
主应用程序是为其他用户,所以基本上如果设置完成,你可以共享主应用程序和所有配置文件。(最终程序)
管理员(定制主应用程序的人)共享主应用程序,例如在他/她的网站上,因此个人访问令牌需要在共享的文件中。
个人访问令牌用于GithubAPI或octokit API从您不拥有的私有或公共repo获取数据。(https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)
现在的问题是,如何保存个人访问令牌?本地在配置文件或在数据库中,然后是问题如何保存数据库密码和用户?
黄金法则是永远不要在最终用户下载的客户端应用程序中存储任何秘密。您应该始终假定代码可以逆向工程。
例如,要对请求进行身份验证或授权,您可以在数据库中存储密码或令牌的单向散列。然后让用户提供一个令牌,将其发送到服务器,对其进行哈希,并将哈希的输出与存储的值进行比较。您可以将其存储在数据库中,但出于几个原因,我建议使用应用程序配置文件。其中之一是用于未来的部署,您可以设置CI/CD来根据环境为您填写值。如果您想在配置中加密该部分以增加安全性,有几种方法。以下是其中之一:
//Change to your WindowsMicrosoft.NETFrameworkVersion directory
aspnet_regiis.exe -pef "system.serviceModel/bindings"
aspnet_regiis.exe -pef "system.serviceModel/services"
如果安全性非常重要,您可以考虑将其存储在受保护的内存中,以防内存转储,但这是一个步骤。