REST 凭据 API
Credentials for REST API
所以基本上我已经准备好分发我的应用程序(它只会在我们的客户中分发,而不是通过互联网在全球范围内分发)。它是一个简单的 WPF (.net Framework 4.8) 应用程序,可与定义的 REST API 进行交互。但是要与上述 API 交互,我当然需要凭据(用户、密码和来自 ClientID 和 ClientSecret 的哈希字符串)。目前我在我的源代码中以纯文本的形式获得了这些信息......这显然不是最终的解决方案。
当我阅读了很多关于保护密码的不同方法(SecureString、RFC2898DeriveBytes、Salts、Peppers 等)时,我不断地失去了注意力。
长话短说,对 API 的请求必须如下所示:
POST https://server.domain.tld/MobiControl/api/token HTTP/1.1
Host: server.domain.tld
Authorization: Basic QXBwbGljYXRpb24xOkFwcGxpY2F0aW9uMVBhc3N3b3Jk
Content-Type: application/x-www-form-urlencoded
Content-Length: 53
grant_type=password&username=Administrator&password=1
由于 Body 以明文形式包含用户名和密码,我问自己,在源代码中安全地加密凭据是否可能并且是否有意义?
API 的凭据是始终相同还是 can/do 它们取决于 WPF 应用程序的使用者?如果您只是使用 WPF 用户的凭据或基于它们的凭据,则没有问题。没有完全可靠的方法来保护您提供给第三方的二进制文件中的凭据。您可以通过加密凭据来使其更难提取,但根据定义,解密密钥也必须在您的应用程序中。
我猜你无法控制 API?否则,唯一的方法是让最终用户的凭据授予对 API.
的访问权限
所以基本上我已经准备好分发我的应用程序(它只会在我们的客户中分发,而不是通过互联网在全球范围内分发)。它是一个简单的 WPF (.net Framework 4.8) 应用程序,可与定义的 REST API 进行交互。但是要与上述 API 交互,我当然需要凭据(用户、密码和来自 ClientID 和 ClientSecret 的哈希字符串)。目前我在我的源代码中以纯文本的形式获得了这些信息......这显然不是最终的解决方案。
当我阅读了很多关于保护密码的不同方法(SecureString、RFC2898DeriveBytes、Salts、Peppers 等)时,我不断地失去了注意力。
长话短说,对 API 的请求必须如下所示:
POST https://server.domain.tld/MobiControl/api/token HTTP/1.1
Host: server.domain.tld
Authorization: Basic QXBwbGljYXRpb24xOkFwcGxpY2F0aW9uMVBhc3N3b3Jk
Content-Type: application/x-www-form-urlencoded
Content-Length: 53
grant_type=password&username=Administrator&password=1
由于 Body 以明文形式包含用户名和密码,我问自己,在源代码中安全地加密凭据是否可能并且是否有意义?
API 的凭据是始终相同还是 can/do 它们取决于 WPF 应用程序的使用者?如果您只是使用 WPF 用户的凭据或基于它们的凭据,则没有问题。没有完全可靠的方法来保护您提供给第三方的二进制文件中的凭据。您可以通过加密凭据来使其更难提取,但根据定义,解密密钥也必须在您的应用程序中。
我猜你无法控制 API?否则,唯一的方法是让最终用户的凭据授予对 API.
的访问权限