Das kürzliche Refactoring der Authentifizierungs-Middleware brach die Übergabe einer URL mit eingebetteter Basic-Authentifizierung im Benutzerinfo-Teil der URI ab, weil basic_auth immer noch in url_prefix=
https://github.com/lostisland/faraday/blob/0f9626c48d0daa24888cb4e5e7962c106a48d97f/ lib/faraday/connection.rb#L364 -L367
~/src/github.com/lostisland/faraday (1.x) $ ruby -Ilib -rfaraday -rfaraday/net_http -rjson -e "puts JSON.load(Faraday.new(url: 'https://user:[email protected]/headers').get.body)['headers']['Authorization']"
WARNING: `Faraday::Connection#basic_auth` is deprecated; it will be removed in version 2.0.
While initializing your connection, use `#request(:basic_auth, ...)` instead.
See https://lostisland.github.io/faraday/middleware/authentication for more usage info.
Basic dXNlcjpwYXNzd29yZA==
~/src/github.com/lostisland/faraday (main) $ ruby -Ilib -rfaraday -rfaraday/net_http -rjson -e "puts JSON.load(Faraday.new(url: 'https://user:[email protected]/headers').get.body)['headers']['Authorization']"
lib/faraday/connection.rb:365:in `block in url_prefix=': undefined method `basic_auth' for #<Faraday::Connection:0x00007fed250abaa8 @parallel_manager=nil, @headers={}, @params={}, @options=#<Faraday::RequestOptions (empty)>, @ssl=#<Faraday::SSLOptions (empty)>, @default_parallel_manager=nil, @manual_proxy=nil, @builder=#<Faraday::RackBuilder:0x00007fed25092210 @adapter=Faraday::Adapter::NetHttp, @handlers=[Faraday::Request::UrlEncoded]>, @url_prefix=#<URI::HTTPS https://user:[email protected]/headers>> (NoMethodError)
from lib/faraday/connection.rb:506:in `with_uri_credentials'
from lib/faraday/connection.rb:364:in `url_prefix='
from lib/faraday/connection.rb:84:in `initialize'
from lib/faraday.rb:96:in `new'
from lib/faraday.rb:96:in `new'
from -e:1:in `<main>'
Ein Test, der dies demonstriert, ist hier verfügbar: https://github.com/lostisland/faraday/compare/1.x...etiennebarrie :test-basic-auth-in-url:
it 'uses User Information from the URI for Basic authentication' do
conn.url_prefix = 'http://user:[email protected]'
expect(conn.url_prefix.to_s).to eq('http://sushi.com/')
request = conn.build_request(:get)
expect(request.headers['Authorization']).to eq("Basic #{Base64.strict_encode64('user:password')}")
end
Wir sollten entscheiden, ob wir dies beheben oder die Unterstützung für diese Funktion entfernen möchten.
Siehe Kommentar von @etiennebarrie in https://github.com/lostisland/faraday/issues/1308#issuecomment -909109525_
@etiennebarrie Ich zitiere deine Gedanken aus dem Kommentar:
Obwohl ich nicht gegen die Einstellung von basic_auth und Autorisierung für Connection bin, denke ich, dass es wirklich nützlich ist, Basic Auth in die URL eingebettet zu haben (sie kann beispielsweise in Secrets konfiguriert werden).
Ich denke ernsthaft darüber nach, die Unterstützung dafür zu entfernen.
Es scheint, als ob diese Praxis bereits 2005 eingestellt wurde und die meisten großen Browser ihre Unterstützung ebenfalls eingestellt haben.
Mich interessiert auch dein obiges Beispiel:
es kann zum Beispiel in Geheimnissen konfiguriert werden
Ich verstehe nicht, wie die Verwendung derbasic_auth
Middleware die Verwendung von Geheimnissen nicht zulassen würde.
Würde so etwas nicht funktionieren?
# Faraday 1.x
conn = Faraday.new(url_with_no_userinfo) do |f|
conn.request :basic_auth, Secrets.basic_auth_user, Secrets.basic_auth_pass
...
end
Wir machen grundsätzlich:
def connection
Faraday.new(url: server) do
# other config
end
end
def server
if global?
secrets.global
elsif something?
secrets.other
elsif something_else?
secrets.another
end
end
Wir brauchen also nur ein Geheimnis pro URL/Benutzer/Passwort.
Wir können jedes Geheimnis vollständig in drei Teile aufteilen oder sogar die einzelne URL geheim halten, aber das Benutzerpasswort extrahieren, bevor wir es an Faraday weitergeben.
Ja das dachte ich mir, danke für die Bestätigung @etiennebarrie 👍
Hallo, hier ist es ein weiterer Anwendungsfall: elastische/elasticsearch-ruby#1479
Danke für den Input @tagliala , letztendlich möchten wir der Community gefallen, daher ist es wichtig zu verstehen, wie oft diese Funktion genutzt wird, um über ihre Zukunft zu entscheiden.
Dies ist offensichtlich eine weit verbreitete Bibliothek, vielen Dank für den Hinweis
Hilfreichster Kommentar
Hallo, hier ist es ein weiterer Anwendungsfall: elastische/elasticsearch-ruby#1479