Pemfaktoran ulang middleware otentikasi baru-baru ini memecahkan URL dengan autentikasi dasar yang disematkan di bagian info pengguna URI, karena basic_auth masih digunakan di 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>'
Tes yang menunjukkan ini tersedia di sini: 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
Kami harus memutuskan apakah kami ingin memperbaikinya atau menghapus dukungan untuk fitur ini.
Lihat komentar oleh @etiennebarrie di https://github.com/lostisland/faraday/issues/1308#issuecomment -909109525_
@etiennebarrie Saya mengutip pemikiran Anda dari komentar:
Meskipun saya tidak menentang penghentian basic_auth dan otorisasi pada Connection, saya pikir dapat memiliki auth dasar yang disematkan di URL sangat berguna (misalnya dapat dikonfigurasi dalam rahasia).
Saya serius berpikir untuk menghapus dukungan untuk ini.
Sepertinya praktik ini telah ditinggalkan pada tahun 2005 dan sebagian besar browser utama juga telah menghentikan dukungannya.
Saya juga ingin tahu tentang contoh Anda di atas:
itu dapat dikonfigurasi dalam rahasia misalnya
Saya tidak melihat bagaimana menggunakan middlewarebasic_auth
tidak memungkinkan untuk menggunakan rahasia?
Bukankah sesuatu seperti ini akan berhasil?
# 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
Kami pada dasarnya melakukan:
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
Jadi kita hanya perlu satu rahasia per URL/pengguna/sandi.
Kami benar-benar dapat membagi setiap rahasia menjadi tiga, atau bahkan merahasiakan satu URL tetapi mengekstrak kata sandi pengguna sebelum meneruskannya ke Faraday.
Ya itu menurut saya, terima kasih sudah mengkonfirmasi @etiennebarrie 👍
Hai, ini dia kasus penggunaan lain: elastic/elasticsearch-ruby#1479
Terima kasih atas masukannya @tagliala , pada akhirnya kami ingin menyenangkan komunitas, jadi penting untuk memahami seberapa banyak fitur ini digunakan untuk memutuskan masa depannya.
Ini jelas merupakan perpustakaan yang tersebar luas, terima kasih banyak telah menunjukkannya
Komentar yang paling membantu
Hai, ini dia kasus penggunaan lain: elastic/elasticsearch-ruby#1479