คำขอ - การรับรองความถูกต้อง

บทนี้จะกล่าวถึงประเภทของการพิสูจน์ตัวตนที่มีอยู่ในโมดูลคำขอ

เราจะพูดถึงสิ่งต่อไปนี้ -

  • การทำงานของการพิสูจน์ตัวตนในคำขอ HTTP
  • การรับรองความถูกต้องขั้นพื้นฐาน
  • การรับรองความถูกต้องของไดเจสต์
  • การตรวจสอบสิทธิ์ OAuth2

การทำงานของการพิสูจน์ตัวตนในคำขอ HTTP

การตรวจสอบสิทธิ์ HTTP อยู่ที่ฝั่งเซิร์ฟเวอร์เพื่อขอข้อมูลการตรวจสอบสิทธิ์บางอย่างเช่นชื่อผู้ใช้รหัสผ่านเมื่อไคลเอ็นต์ร้องขอ URL นี่คือการรักษาความปลอดภัยเพิ่มเติมสำหรับคำขอและการตอบสนองที่แลกเปลี่ยนระหว่างไคลเอนต์และเซิร์ฟเวอร์

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

ไลบรารีคำขอมีการพิสูจน์ตัวตนที่ใช้บ่อยที่สุดในrequest.authซึ่ง ได้แก่ การพิสูจน์ตัวตนพื้นฐาน ( HTTPBasicAuth ) และการพิสูจน์ตัวตนแบบแยกย่อย ( HTTPDigestAuth )

การรับรองความถูกต้องขั้นพื้นฐาน

นี่เป็นรูปแบบที่ง่ายที่สุดในการตรวจสอบสิทธิ์เซิร์ฟเวอร์ ในการทำงานกับการพิสูจน์ตัวตนขั้นพื้นฐานเราจะใช้คลาส HTTPBasicAuth ที่มีอยู่ในไลบรารีคำขอ

ตัวอย่าง

นี่คือตัวอย่างการใช้งานของวิธีการใช้งาน

import requests
from requests.auth import HTTPBasicAuth
response_data = 
requests.get('httpbin.org/basic-auth/admin/admin123', 
auth = HTTPDigestAuth('admin', 'admin123'))
print(response_data.text)

เรากำลังเรียก url https://httpbin.org/basic-auth/admin/admin123ที่มีผู้ใช้เป็นผู้ดูแลระบบและรหัสผ่านเป็นadmin123

ดังนั้น URL นี้จะไม่ทำงานหากไม่มีการตรวจสอบความถูกต้องนั่นคือผู้ใช้และรหัสผ่าน เมื่อคุณให้การรับรองความถูกต้องโดยใช้พารามิเตอร์รับรองความถูกต้องแล้วมีเพียงเซิร์ฟเวอร์เท่านั้นที่จะตอบกลับ

เอาต์พุต

E:\prequests>python makeRequest.py
{
   "authenticated": true,
   "user": "admin"
}

การรับรองความถูกต้องของไดเจสต์

นี่คือรูปแบบการตรวจสอบสิทธิ์อีกรูปแบบหนึ่งที่สามารถใช้ได้กับคำขอ เราจะใช้ประโยชน์จากคลาส HTTPDigestAuth จากคำขอ

ตัวอย่าง

import requests
from requests.auth import HTTPDigestAuth
response_data = 
requests.get('https://httpbin.org/digest-auth/auth/admin/admin123', 
auth = HTTPDigestAuth('admin', 'admin123'))
print(response_data.text)

เอาต์พุต

E:\prequests>python makeRequest.py
{
   "authenticated": true,
   "user": "admin"
}

การตรวจสอบสิทธิ์ OAuth2

ในการใช้การตรวจสอบสิทธิ์ OAuth2 เราจำเป็นต้องมีไลบรารี“ request_oauth2” ในการติดตั้ง“ request_oauth2” ให้ทำดังต่อไปนี้ -

pip install requests_oauth2

การแสดงผลในเทอร์มินัลของคุณขณะติดตั้งจะเป็นอย่างที่แสดงด้านล่าง -

E:\prequests>pip install requests_oauth2
Collecting requests_oauth2
Downloading https://files.pythonhosted.org/packages/52/dc/01c3c75e6e7341a2c7a9
71d111d7105df230ddb74b5d4e10a3dabb61750c/requests-oauth2-0.3.0.tar.gz
Requirement already satisfied: requests in c:\users\xyz\appdata\local\programs
\python\python37\lib\site-packages (from requests_oauth2) (2.22.0)
Requirement already satisfied: six in c:\users\xyz\appdata\local\programs\pyth
on\python37\lib\site-packages (from requests_oauth2) (1.12.0)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\use
rs\xyz\appdata\local\programs\python\python37\lib\site-packages (from requests
->requests_oauth2) (1.25.3)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\xyz\appdata\loca
l\programs\python\python37\lib\site-packages (from requests->requests_oauth2) (2
019.3.9)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\users\xyz\appdata\l
ocal\programs\python\python37\lib\site-packages (from requests->requests_oauth2)
(3.0.4)
Requirement already satisfied: idna<2.9,>=2.5 in c:\users\xyz\appdata\local\pr
ograms\python\python37\lib\site-packages (from requests->requests_oauth2) (2.8)
Building wheels for collected packages: requests-oauth2
Building wheel for requests-oauth2 (setup.py) ... done
Stored in directory: C:\Users\xyz\AppData\Local\pip\Cache\wheels\90\ef\b4\43
3743cbbc488463491da7df510d41c4e5aa28213caeedd586
Successfully built requests-oauth2

เราติดตั้ง“ request-oauth2” เสร็จเรียบร้อยแล้ว ในการใช้ API ของ Google Twitter เราต้องได้รับความยินยอมและทำได้เช่นเดียวกันโดยใช้การตรวจสอบสิทธิ์ OAuth2

สำหรับการตรวจสอบสิทธิ์ OAuth2 เราจะต้องมีรหัสไคลเอ็นต์และรหัสลับ รายละเอียดวิธีการรับมีการกล่าวถึงhttps://developers.google.com/identity/protocols/OAuth2.

หลังจากนั้นให้เข้าสู่ระบบคอนโซล Google API ซึ่งมีให้ที่ https://console.developers.google.com/และรับรหัสลูกค้าและรหัสลับ

ตัวอย่าง

นี่คือตัวอย่างวิธีการใช้ "request-oauth2"

import requests
from requests_oauth2.services import GoogleClient
google_auth = GoogleClient(
   client_id="xxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
   redirect_uri="http://localhost/auth/success.html",
)
a = google_auth.authorize_url(
   scope=["profile", "email"],
   response_type="code",
)
res = requests.get(a)
print(res.url)

เราจะไม่สามารถเปลี่ยนเส้นทางไปยัง URL ที่ระบุได้เนื่องจากจำเป็นต้องลงชื่อเข้าใช้บัญชี Gmail แต่ที่นี่คุณจะเห็นจากตัวอย่างว่า google_auth ทำงานได้และได้รับ URL ที่ได้รับอนุญาต

เอาต์พุต

E:\prequests>python oauthRequest.py
https://accounts.google.com/o/oauth2/auth?redirect_uri=
http%3A%2F%2Flocalhost%2Fauth%2Fsuccess.html&
client_id=xxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com&
scope=profile+email&response_type=code