HTTP Basic Authentication - ประสบการณ์เว็บเบราเซอร์ที่คาดหวังคืออะไร


255

เมื่อเซิร์ฟเวอร์อนุญาตให้เข้าถึงผ่านการรับรองความถูกต้อง HTTP พื้นฐานประสบการณ์ที่คาดว่าจะอยู่ในเว็บเบราว์เซอร์คืออะไร

ไม่สนใจเว็บเบราว์เซอร์สักครู่ต่อไปนี้เป็นวิธีสร้างคำขอ Auth พื้นฐานด้วยcurl:

curl -u myusername:mypassword http://somesite.com

แต่ในเว็บเบราว์เซอร์ล่ะ สิ่งที่ฉันเห็นในบางเว็บไซต์คือฉันไปที่ URL จากนั้นเซิร์ฟเวอร์จะส่งคืนรหัสตอบกลับ 401 จากนั้นเบราว์เซอร์จะแสดงพรอมต์ชื่อผู้ใช้ / รหัสผ่าน

อย่างไรก็ตามใน somesite.com ฉันไม่ได้รับพรอมต์อนุญาตเลยเพียงแค่หน้าเว็บที่ระบุว่าฉันไม่ได้รับอนุญาต มีบางไซต์ที่ใช้เวิร์กโฟลว์การตรวจสอบขั้นต้นไม่ถูกต้องหรือมีอย่างอื่นที่ฉันต้องทำหรือไม่


คุณแน่ใจหรือไม่ว่าคุณใช้การตรวจสอบขั้นพื้นฐานและไม่แยกย่อย
b_erb

ไม่แน่ใจในความแตกต่างนอกจากว่าคุณจะถามว่าฉันเข้ารหัส -64 ถ้าฉันทำแบบนั้นโดยทางมันก็จะเป็น แต่ curl ก็ทำเพื่อฉัน
bpapa

คุณสามารถค้นหาการรับรองความถูกต้องที่ใช้จากส่วนหัวตอบกลับ WWW-Authenticate (ค่า: Digest หรือพื้นฐาน)
Kniganapolke

2
ฉันคิดว่าคำถามนี้จะต้องมีการใช้ถ้อยคำใหม่ มีผู้ตอบมากกว่าหนึ่งคนคิดว่ามันเป็นคำถามเกี่ยวกับการขดมากกว่าเบราว์เซอร์
LS

คุณหมายถึง "การรับรองความถูกต้อง" เมื่อคุณใช้คำว่า "การอนุญาต" หรือไม่
Tarun

คำตอบ:


160

เพื่อช่วยให้ทุกคนหลีกเลี่ยงความสับสนฉันจะปฏิรูปคำถามเป็นสองส่วน

ก่อน: "จะทำการร้องขอ HTTP ที่ผ่านการรับรองความถูกต้องกับเบราว์เซอร์ได้อย่างไรโดยใช้การรับรองความถูกต้องเบื้องต้น" .

ในเบราว์เซอร์คุณสามารถทำ http auth พื้นฐานก่อนโดยรอให้พรอมต์มาหรือแก้ไข URL ถ้าคุณทำตามรูปแบบนี้: http://myusername:mypassword@somesite.com

หมายเหตุ: คำสั่ง curl ที่กล่าวถึงในคำถามนั้นสมบูรณ์แบบหากคุณมีบรรทัดคำสั่งและติดตั้ง curl ;)

อ้างอิง:

นอกจากนี้ตามหน้าคู่มือ CURL https://curl.haxx.se/docs/manual.html

HTTP

  Curl also supports user and password in HTTP URLs, thus you can pick a file
  like:

      curl http://name:passwd@machine.domain/full/path/to/file

  or specify user and password separately like in

      curl -u name:passwd http://machine.domain/full/path/to/file

  HTTP offers many different methods of authentication and curl supports
  several: Basic, Digest, NTLM and Negotiate (SPNEGO). Without telling which
  method to use, curl defaults to Basic. You can also ask curl to pick the
  most secure ones out of the ones that the server accepts for the given URL,
  by using --anyauth.

  NOTE! According to the URL specification, HTTP URLs can not contain a user
  and password, so that style will not work when using curl via a proxy, even
  though curl allows it at other times. When using a proxy, you _must_ use
  the -u style for user and password.

คำถามที่สองและแท้จริงคือ"อย่างไรก็ตามบน somesite.com ฉันไม่ได้รับพรอมต์อนุญาตเลยเพียงแค่หน้าเว็บที่ระบุว่าฉันไม่ได้รับอนุญาต Somesite ไม่ใช้เวิร์กโฟลว์การตรวจสอบขั้นต้นอย่างถูกต้องหรือมีบางอย่าง ฉันต้องทำยังไงดี? "

เอกสาร curl บอกว่า-uตัวเลือกรองรับวิธีการตรวจสอบหลายวิธีพื้นฐานเป็นค่าเริ่มต้น


3
คำถามเกี่ยวกับการม้วนซึ่งไม่ใช่เบราว์เซอร์
Ray Baxter

26
คุณอาจยังไม่ได้อ่านคำถามทั้งหมดอย่างที่มันบอกเพียงแค่ภายใต้คำสั่ง curl: "อย่างไรก็ตามตอนนี้ฉันไม่สามารถเข้าถึง curl (เรื่องยาว) และฉันต้องการทำจากเว็บเบราว์เซอร์ถ้าเป็นไปได้ ." ;)
Nicocube

3
ฉันเห็นด้วยอย่างยิ่งว่า curl ใช้งานได้ดีฉันใช้มันเป็นประจำ แต่คำถามไม่เกี่ยวกับการขด ...
Nicocube

4
ผู้ถามต้องการรู้ว่าทำไมการรับรองความถูกต้อง ไม่ทำงานในเบราว์เซอร์ คำถามไม่ได้เกี่ยวกับ cURL
LS

68

คุณเคยลองไหม

curl somesite.com --user username:password

13
@daronwolff คุณเปลี่ยนเฉพาะตำแหน่งอาร์กิวเมนต์และแทนที่ -u ด้วย --user (ซึ่งเป็นระยะยาวเท่านั้น) แต่นอกเหนือจากที่คุณเขียนสิ่งที่ OP ได้เขียนไว้ในคำถามของเขาแล้ว
Murmel

3
ผู้ถามต้องการรู้ว่าทำไมการรับรองความถูกต้อง ไม่ทำงานในเบราว์เซอร์ คำถามไม่ได้เกี่ยวกับ cURL
LS

15

คุณอาจมีชื่อผู้ใช้ / รหัสผ่านเก่าที่ไม่ถูกต้องถูกแคชในเบราว์เซอร์ของคุณ ลองล้างพวกเขาและตรวจสอบอีกครั้ง

หากคุณใช้ IE และ somesite.com อยู่ในโซนความปลอดภัยของอินทราเน็ต IE อาจส่งข้อมูลรับรอง windows ของคุณโดยอัตโนมัติ


8

ส่วนหัว WWW รับรองความถูกต้อง

คุณอาจได้รับสิ่งนี้หากเซิร์ฟเวอร์กำลังส่งรหัสตอบกลับ 401 แต่ไม่ได้ตั้งค่าส่วนหัว WWW-Authenticate อย่างถูกต้อง - ฉันควรรู้ฉันเพิ่งแก้ไขมันในโค้ดของตัวเองเพราะแอป VB ไม่ได้แสดงพร้อมท์การตรวจสอบสิทธิ์


6

หากไม่มีข้อมูลประจำตัวที่ให้ไว้ในส่วนหัวคำขอต่อไปนี้คือการตอบสนองขั้นต่ำที่จำเป็นสำหรับ IE เพื่อแจ้งให้ผู้ใช้รับข้อมูลประจำตัวและส่งคำขออีกครั้ง

Response.Clear();
Response.StatusCode = (Int32)HttpStatusCode.Unauthorized;
Response.AddHeader("WWW-Authenticate", "Basic");

5

คุณสามารถใช้ปลั๊กอิน Postman สำหรับ Chrome ได้ มันให้ความสามารถในการเลือกประเภทการตรวจสอบที่คุณต้องการสำหรับแต่ละคำขอ ในเมนูนั้นคุณสามารถกำหนดค่าผู้ใช้และรหัสผ่าน บุรุษไปรษณีย์จะแปลการกำหนดค่าเป็นส่วนหัวการรับรองความถูกต้องโดยอัตโนมัติซึ่งจะส่งพร้อมกับคำขอของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.