5

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&amp;chld=M|0&amp;cht=qr&amp;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?

+0

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

Odpowiedz