Próbuję skonfigurować uwierzytelnianie dwuskładnikowe w Google Authenticator w mojej witrynie. Jestem w stanie wygenerować kody działa, ale kiedy wstawić URL obrazu na stronie, pojawia się następujący błąd w Chrome inspektora:400 Nieprawidłowe żądanie podczas próby wstawienia obrazu kodu QR dla Google Authenticator
GET https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/MyLabel?secret=THESECRET 400 (Bad Request)
kod, aby wygenerować kod QR:
try
key = crypto.randomBytes(10).toString('hex')
catch error
console.log "error generating code: #{error}"
encoded = base32.encode(key)
label = encodeURIComponent "MyLabel"
uri = "otpauth://totp/#{label}?secret=#{encoded}"
url = "https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=#{uri}"
jQuery po stronie klienta, który wstawia obraz:
img = $("<img>").attr("src", url)
$("#qr_box").html("")
$("#qr_box").append(img)
co skutkuje następujący kod HTML na stronie:
<img src="https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/MyLabel?secret=THESECRET">
Obraz można bez problemu otworzyć w nowej karcie. Obraz jest wyświetlany tylko na mojej stronie około 1/10 czasu; innym razem Chrome daje 400. Czy brakuje tu czegoś oczywistego?
Wygląda na to, że zapytanie przesłane do Google przez przeglądarkę było zwracane z tekstem typu text/html zamiast obrazu/png. Skonfigurowałem prosty punkt końcowy, aby zażądać adresu URL, złapać odpowiedź i ustawić typ na image/png przed powrotem do mojego interfejsu. Jeśli ktoś zna bardziej elegancki sposób, chciałbym to usłyszeć. – kshen