Ich bin neu in Rails 4 und verstehe die Verwendung von secret_key_base
under config/secrets.yml
in Rails 4 nicht. Können Sie dieses Konzept bitte erläutern?
Auch, wenn ich in der Produktionsumgebung arbeite, bin ich aufgefordert , die setzen secret_key
mit devise.rb
, config.secret_key
und secret_key_base
. Mit dem rake secret
Befehl kann ich jedoch ein neues Geheimnis generieren .
Was ist der Unterschied zwischen Entwicklungs- und Produktionsumgebungen?
Wie secret_key
stimmt es mit dem neu generierten überein, wenn ich es bei secret_key_base
jedem Generieren hinzufüge ?
Wie wird die Anwendung mit anderen Servern gesichert?
secret_key_base
wird weiterhin verwendet, aberconfig/credentials.yml.enc
stattdessen gespeichert . Diese Datei ist verschlüsselt. Weitere Informationen zum neuen Anmeldeinformationssystem finden Sie hier oder führen Sie es ausrails credentials:help
.Antworten:
Der
secret_token.rb
Inhalt der Datei enthält eine lange, zufällige Zeichenfolge, mit der die Integrität signierter Cookies überprüft wird (z. B. Benutzersitzungen, wenn Personen in Ihrer Web-App angemeldet sind).Die Dokumentation sagt:
Da es sich um eine wichtige Datei handelt und Sie sie nicht in .gitignore ablegen können, wird empfohlen, die env-Variable zum Speichern des
secret_key_base
Werts zu verwenden:erstellen
.env
oder.powenv
archivieren und speichern als:export SECRET_TOKEN="9489b3eee4eccf317ed77407553e8adc97baca7c74dc7ee33cd93e4c8b69477eea66eaedeb18af0be2679887c7c69c0a28c0fded0a71ea472a8c4laalal19cb"
Und dann rein
config/initializers/secret_token.rb
YourAppName::Application.config.secret_key_base = if Rails.env.development? or Rails.env.test? # generate simple key for test and development environments ('a' * 30) # should be at least 30 chars long else ENV['SECRET_TOKEN'] end
Dieser Artikel ist (ein bisschen alt und) lang, aber voller nützlicher Informationen zum Thema.
UPDATE 04.05.15
Ab Rails 4.2 gibt es keine
secret_token.rb
Datei mehr . Nach neuer Konvention gibt es eineconfig/secrets.yml
Datei, in der die Geheimnisse der Anwendung gespeichert werden sollen.Lesen Sie, wie Sie eine vorhandene App entsprechend den Innovationen auf 4.2.x aktualisieren können.
Technisch gesehen besteht der Zweck
secrect_key_base
darin, die geheime Eingabe für diekey_generator
Methode der Anwendung zu sein (PrüfungRails.application.key_generator
).Die Anwendung ist
key_generator
, und somitsecret_key_base
verwendet werden, um drei Kerne innerhalb des Rails - Framework verfügen über :cookies.encrypted
.cookies.signed
.message_verifier
Instanzen der Anwendung .Weitere Informationen zu den drei Themen finden Sie im Artikel von @michaeljcoyne .
quelle
config/secret.yml
wenn Sie dies bevorzugen.secret_key_base
, dass Ihre Benutzer beim Ändern abgemeldet werden. Wenigstens.secret_key_base wird zum Verschlüsseln und Signieren der Sitzung verwendet
um die Sitzung sicher in Cookies hin und her zu senden
In Schienen 4 ,
Hello
, undsession['a'] = 'b'
,Ihr Cookie sieht ungefähr so aus:
_Hello_session=BAh7B0kiD3%3D%3D--dc40a55cd52fe32bb3b84ae0608956dfb5824689
was übersetzt in:
Cookies werden vom Server gesetzt und clientseitig gespeichert. Der Browser sendet gesetzte Cookies jedes Mal erneut an den Server, wenn wir eine Seite anfordern.
Um zu verhindern, dass böse Menschen
a=b
Zeichenfolgen verstehen , werden diese verschlüsselt .Um zu verhindern, dass böse Menschen Cookies manipulieren, wird eine digitale Signatur verwendet.
In beiden Fällen wird der Wert secret_key_base verwendet (um a = b zu verschlüsseln / zu entschlüsseln und die digitale Signatur zu validieren).
quelle