Faraday: Melewati URL dengan autentikasi dasar yang disematkan rusak

Dibuat pada 1 Sep 2021  ·  5Komentar  ·  Sumber: lostisland/faraday

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_

bug unconfirmed

Komentar yang paling membantu

Hai, ini dia kasus penggunaan lain: elastic/elasticsearch-ruby#1479

Semua 5 komentar

@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 middleware basic_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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

t3hk0d3 picture t3hk0d3  ·  3Komentar

amrrbakry picture amrrbakry  ·  4Komentar

ryanbyon picture ryanbyon  ·  3Komentar

JasonBarnabe picture JasonBarnabe  ·  4Komentar

jedeleh picture jedeleh  ·  3Komentar