Python oauth2 nhận mã ủy quyền
Tài liệu này là một phần của hướng dẫn Hiểu về OAuth2 và Xây dựng Máy chủ Ủy quyền Cơ bản của riêng bạn. Nó thảo luận chi tiết về cách hoạt động của luồng Mã ủy quyền Show
Thiết lập môi trường của bạn
Đang tải xuống mãTải mã nguồn tại đây Mẫu bao gồm các tệp sau Chạy mãChạy mã riêng như sau python AC_client.pypython AC_auth_server.pypython API_server.py Ghé thăm khách hàng tại http. //127. 0. 0. 1. 5000. Máy chủ ủy quyền lắng nghe ở 127. 0. 0. 1. 5001 và máy chủ API khả dụng tại 127. 0. 0. 1. 5002 Cách hoạt động của luồng Mã ủy quyềnChuyển hướng người dùng đến trang đăng nhập do máy chủ ủy quyền cung cấpCác luồng bắt đầu với việc người dùng truy cập đường dẫn http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 2. Đoạn mã sau trong http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 3 trình bày một trang đơn giản tại http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 2 hiển thị một nút nhắc người dùng đăng nhập bằng máy chủ ủy quyềnCác tham số http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 5, http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 6, http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 7 và http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 8 được chuyển để tạo URL chuyển hướng đầy đủ. Khi trang đã sẵn sàng, nhấn các nút sẽ chuyển hướng người dùng đếnhttp://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback Giá trị của http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 6, http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 20, cho biết việc khởi tạo luồng mã ủy quyền. Vì máy chủ ủy quyền trong mẫu này chỉ hỗ trợ một luồng nên giá trị không được sử dụng; . Ngoài ra, http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 7 xác định duy nhất ứng dụng khách và http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 8 là nơi gửi mã ủy quyềnPhương thức http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 23 của máy chủ ủy quyền chấp nhận các tham số này và hiển thị trang mô tả những gì khách hàng đang yêu cầu quyền truy cập vàoNguồn. https. //github. com/michaelawyu/auth-server-sample/blob/master/AC/auth_server/AC_auth_server. py#L14Nếu người dùng đồng ý với các yêu cầu, họ có thể đăng nhập bằng thông tin đăng nhập của mình. Thông tin nhạy cảm, chẳng hạn như thông tin đăng nhập của người dùng, chỉ được xử lý bởi máy chủ ủy quyền, do đó bảo vệ người dùng (chủ sở hữu tài nguyên). Lưu ý rằng trong bước này, máy chủ ủy quyền cũng xác minh xem yêu cầu từ máy khách (URL chuyển hướng) có khớp với yêu cầu của nó trong quá trình đăng ký hay không Trả lại mã ủy quyềnMáy chủ ủy quyền xử lý thông tin xác thực mà người dùng cung cấp bằng phương thức http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 24; Nguồn. https. //github. com/michaelawyu/auth-server-sample/blob/master/AC/auth_server/AC_auth_server. py#L43Mã ủy quyền được tạo bằng phương pháp http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 25Nguồn. https. //github. com/michaelawyu/auth-server-sample/blob/master/AC/auth_server/auth. py#L43Đối với mã ủy quyền, mẫu này mã hóa chuỗi JSON chứa các trường http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 7 và http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 8 bằng Fernet, một phương pháp mã hóa đối xứng. Bạn cũng có thể tạo mã ủy quyền ở các định dạng khác, miễn là nó phù hợp với các tiêu chí sau
Ngoài ra, một mã ủy quyền chỉ có thể được sử dụng một lần, điều đó có nghĩa là bạn cần lưu giữ hồ sơ về các mã ủy quyền đã cấp. Đoạn mã trên lưu trữ chúng, cùng với ngày hết hạn tương ứng của chúng, trong bộ nhớ cùng với từ điển, để giữ cho mẫu càng đơn giản càng tốt; Sau khi mã ủy quyền được tạo, người dùng được chuyển hướng trở lại máy khách với mã được nhúng trong yêu cầu Trao đổi mã ủy quyền lấy mã thông báo truy cậpKhách hàng nhận được mã ủy quyền tại đường dẫn python AC_client.pypython AC_auth_server.pypython API_server.py60. Sau đó, mã được gửi trở lại máy chủ ủy quyền, cùng với http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 7, python AC_client.pypython AC_auth_server.pypython API_server.py62 và http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 8, để đổi lấy mã thông báo truy cậpNguồn. https. //github. com/michaelawyu/auth-server-sample/blob/master/AC/client/AC_client. py#L55Vì lý do đơn giản, ở cuối phương thức, mã thông báo truy cập được ghi vào cookie khi nó được máy chủ ủy quyền trả về. Tuy nhiên, trong thế giới thực, hầu hết các nhà phát triển thích lưu trữ mã thông báo truy cập trong Bộ lưu trữ web HTML (đối với ứng dụng web) hoặc bộ nhớ cục bộ (đối với ứng dụng di động) thay vì. Cần chỉ ra rằng việc lưu mã thông báo truy cập vào cookie không tạo ra OAuth 2. 0 chuyển một biến thể của ủy quyền dựa trên cookie. mã thông báo, mặc dù nằm trong cookie, nhưng không bao giờ được chuyển qua cookie; Xác thực thông tin đăng nhập và trả lại mã thông báo truy cậpPhương thức python AC_client.pypython AC_auth_server.pypython API_server.py64 của máy chủ ủy quyền ( python AC_client.pypython AC_auth_server.pypython API_server.py65) lắng nghe mã ủy quyền đến, xác thực chúng và trả lời bằng mã thông báo truy cậpNguồn. https. //github. com/michaelawyu/auth-server-sample/blob/master/AC/auth_server/AC_auth_server. py#L72 Phương thức python AC_client.pypython AC_auth_server.pypython API_server.py66, như tên gọi của nó, kiểm tra xem http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 7 và python AC_client.pypython AC_auth_server.pypython API_server.py62 có khớp không. Mặt khác, phương thức python AC_client.pypython AC_auth_server.pypython API_server.py69 xác nhận rằng mã ủy quyền hợp lệ. Phương pháp trước đây là giả trong mẫu; . Bạn nên thay thế chúng bằng logic xác minh của riêng bạn. Tuy nhiên, phương pháp thứ hai được định nghĩa trong python AC_client.pypython AC_auth_server.pypython API_server.py71Nguồn. https. //github. com/michaelawyu/auth-server-sample/blob/master/AC/auth_server/auth. py#L62 Ngoài ra, phương pháp python AC_client.pypython AC_auth_server.pypython API_server.py72 được định nghĩa như sau Mẫu này sử dụng gói pyjwt để tạo JWT. python AC_client.pypython AC_auth_server.pypython API_server.py73 là nhà phát hành mã thông báo truy cập này ( python AC_client.pypython AC_auth_server.pypython API_server.py74). python AC_client.pypython AC_auth_server.pypython API_server.py75 là ngày hết hạn của mã thông báo truy cập, được đặt thành python AC_client.pypython AC_auth_server.pypython API_server.py76 giây ( python AC_client.pypython AC_auth_server.pypython API_server.py77). Mỗi mã thông báo truy cập trong mẫu này được mã hóa bằng khóa riêng và có thể được giải mã bằng khóa chung tương ứng; Sử dụng mã thông báo truy cập để truy cập tài nguyênSau khi mã thông báo truy cập được nhận và ghi vào cookie, khách hàng có thể sử dụng nó để truy cập máy chủ API Nguồn. https. //github. com/michaelawyu/auth-server-sample/blob/master/AC/client/AC_client. py#L28Như đã nói trước đó, thay vì được nhúng trong cookie, mã thông báo truy cập được chuyển như một phần của tiêu đề Ủy quyền của yêu cầu HTTP Phương thức python AC_client.pypython AC_auth_server.pypython API_server.py78 từ python AC_client.pypython AC_auth_server.pypython API_server.py79 trích xuất mã thông báo truy cập từ tiêu đề và xác minh nó bằng phương thức python AC_client.pypython AC_auth_server.pypython API_server.py80Nguồn. https. //github. com/michaelawyu/auth-server-sample/blob/master/AC/API_server/auth. py#L9 Chúng tôi cũng sử dụng gói python AC_client.pypython AC_auth_server.pypython API_server.py9 để xác minh JWT. Nó kiểm tra chữ ký của JWT và đảm bảo rằng giá trị của các trường python AC_client.pypython AC_auth_server.pypython API_server.py73 và python AC_client.pypython AC_auth_server.pypython API_server.py75 là hợp lệ. Các trường tùy chỉnh (nếu có) được bao gồm trong mã thông báo đã giải mã và có thể được xác minh thủ côngGhi chú quan trọng
http://localhost:5001/auth?response_type=code&client_id=sample-client-id&redirect_url=http://localhost:5000/callback 2cho phép các ứng dụng phân phối nội dung qua HTTPS bằng khóa riêng và chứng chỉ tự ký khi chạy cục bộ. Tuy nhiên, có khả năng trình duyệt của bạn sẽ đưa ra cảnh báo khi sử dụng phương pháp này, vì rõ ràng, các chứng chỉ tự ký không thể tin cậy được Làm cách nào để lấy mã ủy quyền từ chuyển hướng URI Python?Làm cách nào để lấy mã ủy quyền từ Python URI chuyển hướng? . OAuth là một giao thức mã nguồn mở và an toàn để ủy quyền cho người dùng giữa các dịch vụ không liên quan. . Bước 1. ủy quyền Bước 2. Tìm nạp mã thông báo truy cập Bước 3. Lấy thông tin người dùng Làm cách nào tôi có thể lấy mã ủy quyền mã thông báo truy cập?Nhận mã thông báo truy cập
. send a POST request containing your authorization code to the DocuSign authentication service.
Làm cách nào để nhận mã thông báo truy cập từ phản hồi trong Python?Nhận Mã truy cập
. Bạn sẽ thêm mã thông báo xác thực vào tiêu đề của mỗi yêu cầu API. Ví dụ Python sau đây cho thấy cách lấy mã thông báo xác thực và tạo tiêu đề Ủy quyền bằng cách sử dụng mã thông báo. Use your client ID and client secret to obtain an auth token. You will add the auth token to the header of each API request. The following Python example shows how to obtain an auth token and create the Authorization header using the token.
Làm cách nào tôi có thể nhận được OAuth 2. 0 ID khách hàng?Yêu cầu OAuth 2. . Chuyển đến Bảng điều khiển API của Google Chọn một dự án hoặc tạo một dự án mới. . Nhấp vào Tiếp tục để bật Fitness API Nhấp vào Chuyển đến thông tin đăng nhập Nhấp vào Thông tin đăng nhập mới, sau đó chọn ID ứng dụng khách OAuth Trong Loại ứng dụng chọn Android |