📅  最后修改于: 2023-12-03 15:38:25.133000             🧑  作者: Mango
在 Rails 中使用凭据(Credentials)来存储敏感信息,例如 API 密钥、用户名和密码等。这些凭据存储在加密文件中,以确保安全性。但是,在代码中需要使用这些凭据时,我们需要将它们解密。这篇文章将提供如何在 Rails 中解密凭据的详细解释。
Rails 使用 config/master.key
文件对凭据进行加密和解密,该文件必须是机密和安全的。在部署应用程序时,您应该将 master.key
文件保护好。您可以将其存储在服务器环境变量中,例如 ENV['RAILS_MASTER_KEY'],或存储在云密钥管理服务中。
要在 Rails 代码中使用凭据,首先您需要在 config/credentials.yml.enc
文件中存储它们。该文件是加密的 YAML 文件,其中包含您需要存储的凭据。例如:
api:
key: 123456789abcdefg
secret: abcdefghijklmnopqrstuvwxyz
在此示例中,我们存储了 api
凭据,其中包含 key
和 secret
的信息。
要访问这些凭据,您可以使用 Rails.application.credentials
对象。例:
Rails.application.credentials.api[:key]
这将返回 123456789abcdefg
。
在您访问凭据之前,Rails 将自动解密 credentials.yml.enc
文件。当您访问 Rails.application.credentials
对象时,Rails 将自动使用 config/master.key
文件对凭据进行解密并将其加载到内存中。
如果您需要手动解密凭据,您可以使用 Rails::Credentials
模块的 read
方法。例如,以下代码将读取并解密凭据:
require 'yaml'
require 'encrypted_strings'
encrypted_file = File.read('config/credentials.yml.enc')
decrypted_file = EncryptedStrings.decrypt(encrypted_file, key: Rails.application.credentials.config[:decryption_key])
credentials = YAML.load(decrypted_file)
api_credentials = credentials['api']
注意,此示例假定您已经拥有了解密 config/credentials.yml.enc
文件的过程所需的密钥,即 decryption_key
。这可以是存储在环境变量中的值,或存储在云密钥管理服务中的值。
在 Rails 中使用凭据存储敏感信息可以确保应用程序的安全性。要访问这些凭据,您可以使用 Rails.application.credentials
对象。如果您需要手动解密凭据,则可以使用 Rails::Credentials
模块的 read
方法。不要忘记保护好 config/master.key
文件,以确保凭据安全!