Hướng dẫn python requests session auth - python yêu cầu xác thực phiên
Tôi đang cố gắng sử dụng xác thực HTTP cơ bản trong Python. Tôi đang sử dụng thư viện yêu cầu: Show
Nội phân chính
drfpasswordlessauth variable:
Biến biểu mẫu phản hồi Biến Auth:
Nhưng khi tôi cố gắng lấy dữ liệu từ các vị trí khác nhau, - Tôi đã gặp lỗi 401 Theo tôi hiểu - trong yêu cầu thứ hai không phải là tham số phiên thay thế.
Mã thông báo ủy quyền cơ bản làm thông tin đăng nhập trong tiêu đề yêu cầu https://postman-echo.com/basic-auth Chúng ta hãy khám phá cả hai cách trong Python. Với mục đích của bản demo, chúng tôi sẽ sử dụng điểm cuối cơ bản được phơi bày bởi Postman 1. Tên người dùng & mật khẩu dưới dạng thông tin đăng nhập:Mặc dù đây là một yêu cầu GET, các cuộc gọi Auth Basic cho tất cả các phương thức HTTP khác sẽ vẫn giữ nguyên với một ngoại lệ mà thay vì phương thức Get (), hãy sử dụng phương thức điều trị được hiển thị bởi Thư viện Yêu cầu. import requests url = "https://postman-echo.com/basic-auth" username = "postman" password = "password" response = requests.get(url, auth=(username, password)) print(response.status_code) print(response.json()) 2. Mã thông báo cơ bản là thông tin đăng nhập:Chúng tôi có thể trực tiếp nhúng tên người dùng và mật khẩu cơ bản vào yêu cầu bằng cách truyền tên người dùng và mật khẩu dưới dạng phương thức https://postman-echo.com/basic-auth3 và phương thức get () trong các yêu cầu sẽ đảm nhận ủy quyền cơ bản cho chúng tôi. Basic cG9zdG1hbjpwYXNzd29yZA== import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json()) Có một cơ hội là đối với API, bạn chỉ nhận được mã thông báo Auth cơ bản thay vì tên người dùng và mật khẩu. Trong kịch bản này, tất cả những gì bạn cần làm là nhúng mã thông báo auth cơ bản làm tiêu đề ủy quyền trong khi thực hiện cuộc gọi API. Một mã thông báo authic cơ bản mẫu sẽ trông như thế nàyĐầu ra 200 {'authenticated': True} Đối với các yêu cầu được thực hiện với thông tin xác thực cơ bản hợp lệ 401 {'authenticated': False} authentication.py
-Jacob Kaplan-Moss, "Thực hành tồi tệ nhất" Xác thực là cơ chế liên kết một yêu cầu đến với một tập hợp các thông tin xác định, chẳng hạn như người dùng yêu cầu đến từ hoặc mã thông báo mà nó đã ký. Các chính sách cho phép và điều chỉnh sau đó có thể sử dụng các thông tin đó để xác định xem yêu cầu có nên được phép hay không. REST Framework cung cấp một số sơ đồ xác thực ra khỏi hộp và cũng cho phép bạn thực hiện các chương trình tùy chỉnh. Xác thực luôn chạy ngay khi bắt đầu xem, trước khi kiểm tra cho phép và điều chỉnh, và trước khi bất kỳ mã nào khác được phép tiến hành. Thuộc tính https://postman-echo.com/basic-auth4 thường sẽ được đặt thành một thể hiện của lớp https://postman-echo.com/basic-auth6 của gói https://postman-echo.com/basic-auth5. Thuộc tính Lưu ý: Đừng quên rằng xác thực của chính nó sẽ không cho phép hoặc không cho phép yêu cầu đến, nó chỉ cần xác định thông tin đăng nhập mà yêu cầu được thực hiện. Cách xác định xác thựcĐể biết thông tin về cách thiết lập các chính sách quyền cho API của bạn, vui lòng xem tài liệu quyền. Các sơ đồ xác thực luôn được định nghĩa là danh sách các lớp. REST Framework sẽ cố gắng xác thực với mỗi lớp trong danh sách và sẽ đặt https://postman-echo.com/basic-auth4 và https://postman-echo.com/basic-auth7 bằng cách sử dụng giá trị trả về của lớp đầu tiên xác thực thành công. Nếu không có lớp xác thực, https://postman-echo.com/basic-auth4 sẽ được đặt thành một thể hiện là import requests url = "https://postman-echo.com/basic-auth" username = "postman" password = "password" response = requests.get(url, auth=(username, password)) print(response.status_code) print(response.json())1 và https://postman-echo.com/basic-auth7 sẽ được đặt thành import requests url = "https://postman-echo.com/basic-auth" username = "postman" password = "password" response = requests.get(url, auth=(username, password)) print(response.status_code) print(response.json())3. Đặt sơ đồ xác thựcApache mod_wsgi Cấu hình cụ thể
Tham khảo API 0BASICAUMPENTION 1Tokenenuthentication
Các phản hồi của HTTP 401 phải luôn bao gồm một tiêu đề Basic cG9zdG1hbjpwYXNzd29yZA==1, hướng dẫn khách hàng cách xác thực. Phản hồi của HTTP 403 không bao gồm tiêu đề Basic cG9zdG1hbjpwYXNzd29yZA==1. Loại phản hồi sẽ được sử dụng phụ thuộc vào sơ đồ xác thực. Mặc dù nhiều sơ đồ xác thực có thể được sử dụng, nhưng chỉ có một sơ đồ có thể được sử dụng để xác định loại phản hồi. Lớp xác thực đầu tiên được đặt trên chế độ xem được sử dụng khi xác định loại phản hồi.The first authentication class set on the view is used when determining the type of response. Lưu ý rằng khi một yêu cầu có thể xác thực thành công, nhưng vẫn bị từ chối cho phép thực hiện yêu cầu, trong trường hợp đó, phản hồi Basic cG9zdG1hbjpwYXNzd29yZA==3 sẽ luôn được sử dụng, bất kể sơ đồ xác thực. Apache mod_wsgi Cấu hình cụ thểLưu ý rằng nếu triển khai cho Apache bằng MOD_WSGI, tiêu đề ủy quyền không được chuyển qua ứng dụng WSGI theo mặc định, vì giả định rằng xác thực sẽ được Apache xử lý, thay vì ở cấp ứng dụng. Nếu bạn đang triển khai cho Apache và sử dụng bất kỳ xác thực không dựa trên phiên nào, bạn sẽ cần cấu hình rõ ràng MOD_WSGI để chuyển các tiêu đề cần thiết qua ứng dụng. Điều này có thể được thực hiện bằng cách chỉ định Chỉ thị Basic cG9zdG1hbjpwYXNzd29yZA==4 trong bối cảnh thích hợp và đặt nó thành Basic cG9zdG1hbjpwYXNzd29yZA==5. 2Tham khảo APIBASICAUMPENTIONSơ đồ xác thực này sử dụng xác thực cơ bản HTTP, được ký vào tên người dùng và mật khẩu của người dùng. Xác thực cơ bản thường chỉ phù hợp để kiểm tra. Nếu được xác thực thành công, Basic cG9zdG1hbjpwYXNzd29yZA==6 cung cấp các thông tin sau đây.
Các phản hồi không xác thực bị từ chối cho phép sẽ dẫn đến phản hồi import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())1 với tiêu đề xác thực www thích hợp. Ví dụ: 3Lưu ý: Nếu bạn sử dụng Basic cG9zdG1hbjpwYXNzd29yZA==6 in production you must ensure that your API is only available over import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())3. You should also ensure that your API clients will always re-request the username and password at login, and will never store those details to persistent storage. TokenenuthenticationLưu ý: Xác thực mã thông báo được cung cấp bởi Django Rest Framework là một triển khai khá đơn giản. The token authentication provided by Django REST framework is a fairly simple implementation. Đối với việc triển khai cho phép nhiều hơn một mã thông báo cho mỗi người dùng, có một số chi tiết triển khai bảo mật chặt chẽ hơn và hỗ trợ hết hạn mã thông báo, vui lòng xem gói bên thứ ba Django REST KNOX. Sơ đồ xác thực này sử dụng sơ đồ xác thực HTTP dựa trên mã thông báo đơn giản. Xác thực mã thông báo phù hợp cho các thiết lập máy khách-máy chủ, chẳng hạn như máy tính để bàn gốc và máy khách di động. Để sử dụng sơ đồ import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())4, bạn sẽ cần định cấu hình các lớp xác thực để bao gồm import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())4 và bao gồm cả import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())6 trong cài đặt import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())7 của bạn: 4Đảm bảo chạy import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())8 sau khi thay đổi cài đặt của bạn. Ứng dụng import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())6 cung cấp di chuyển cơ sở dữ liệu Django. Bạn cũng sẽ cần tạo mã thông báo cho người dùng của mình. 5Để khách hàng xác thực, khóa mã thông báo nên được bao gồm trong tiêu đề 200 {'authenticated': True}0 HTTP. Phím phải được đặt trước bằng chuỗi "mã thông báo" theo nghĩa đen, với khoảng trắng ngăn cách hai chuỗi. Ví dụ: 6Nếu bạn muốn sử dụng một từ khóa khác trong tiêu đề, chẳng hạn như 200 {'authenticated': True}1, chỉ cần phân lớp con import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())4 và đặt biến lớp 200 {'authenticated': True}3. Nếu được xác thực thành công, import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())4 cung cấp các thông tin sau đây.
Các phản hồi không xác thực bị từ chối cho phép sẽ dẫn đến phản hồi import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())1 với tiêu đề xác thực www thích hợp. Ví dụ: 7Lưu ý: Nếu bạn sử dụng Basic cG9zdG1hbjpwYXNzd29yZA==6 trong sản xuất, bạn phải đảm bảo rằng API của bạn chỉ khả dụng trên import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())3. Bạn cũng nên đảm bảo rằng các máy khách API của bạn sẽ luôn yêu cầu lại tên người dùng và mật khẩu khi đăng nhập và sẽ không bao giờ lưu trữ các chi tiết đó để lưu trữ liên tục. 8Tokenenuthentication If you use import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())4 in production you must ensure that your API is only available over import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())3. Lưu ý: Xác thực mã thông báo được cung cấp bởi Django Rest Framework là một triển khai khá đơn giản.Đối với việc triển khai cho phép nhiều hơn một mã thông báo cho mỗi người dùng, có một số chi tiết triển khai bảo mật chặt chẽ hơn và hỗ trợ hết hạn mã thông báo, vui lòng xem gói bên thứ ba Django REST KNOX.Sơ đồ xác thực này sử dụng sơ đồ xác thực HTTP dựa trên mã thông báo đơn giản. Xác thực mã thông báo phù hợp cho các thiết lập máy khách-máy chủ, chẳng hạn như máy tính để bàn gốc và máy khách di động. 9Để sử dụng sơ đồ import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())4, bạn sẽ cần định cấu hình các lớp xác thực để bao gồm import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())4 và bao gồm cả import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())6 trong cài đặt import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())7 của bạn: Đảm bảo chạy import requests url = "https://postman-echo.com/basic-auth" header = {"Authorization" : "Basic cG9zdG1hbjpwYXNzd29yZA=="} response = requests.get(url, headers=header) print(response.status_code) print(response.json())8 sau khi thay đổi cài đặt của bạn. 0Ứng dụng |