7

Gần đây tôi đã bắt đầu với Google App Engine. Tôi định sử dụng Flask để phục vụ các trang web và API Endpoints, tốt nhất là với Endpoints-Proto-Datastore cho mọi thứ khác.Máy ứng dụng của Google: Xác thực điểm cuối khi xác thực tùy chỉnh hoặc ID mở được sử dụng

Ngay từ đầu, các cơ chế xác thực không phải của Google trên GAE có vẻ như họ cần một số công việc. Tôi đánh giá cao bất kỳ ánh sáng tỏ về những vấn đề tôi đã tìm thấy cho đến nay:

Tuỳ chỉnh xác thực

Nếu bạn có thể viết một nhà cung cấp ID mở như là một phần của ứng dụng, sử dụng giống như Python-OpenID và cũng thực hiện một người tiêu dùng trong cùng một quy trình làm việc để nó xuất hiện như đăng nhập thông thường. Bằng cách này, nó tích hợp độc đáo vào những gì API người dùng GAE cung cấp. Tôi đoán nếu điều này được thực hiện đúng, users.get_current_user() sẽ hoạt động tốt.

Nếu bạn muốn bỏ qua viết nhà cung cấp OpenID của riêng bạn và thay vào đó viết hệ thống xác thực email/mật khẩu bằng cách sử dụng Flask-Login tích hợp với NDB, điều đó cũng không sao. Tuy nhiên, một chút khó hiểu thông tin trong GAE documentation nói rằng tôi có thể tạo một đối tượng sử dụng như sau:

user = users.User("[email protected]")

Tuy nhiên, (không có user.put() phương pháp ở đây) một users.get_current_user() vẫn trả về None. Vậy việc sử dụng đối tượng người dùng sẽ như thế nào?

thiết bị đầu cuối Authorization

On bao gồm một user = yêu cầu trong phương pháp trang trí cho một Endpoint-Proto-Datastore cán API, OAuth dường như làm việc ngay lập tức - tất cả các bạn phải làm trong khi thử nghiệm nó trong các API explorer là bật khóa chuyển OAuth 2.0 và chọn Phạm vi Oauth 2.0 hợp lệ. Vậy điều đó có nghĩa là nếu chúng tôi triển khai nhà cung cấp OpenID tích hợp với API người dùng một cách chính xác, sẽ không đủ để sử dụng ma thuật OAuth của API điểm cuối?

Ở đây cũng vậy, có vẻ như việc xây dựng một đối tượng người dùng sẽ không giúp đáp ứng yêu cầu xác thực.

Xác thực tùy chỉnh/triển khai OpenID khác hoạt động như thế nào với xác thực/ủy quyền API điểm cuối?

+0

Câu hỏi rất hay. Tôi muốn làm nhiều hơn hoặc ít hơn cùng một điều: thực hiện một số loại xác thực "cơ bản" với tên người dùng/mã thông báo. Đã thử với một servletFilter, nhưng có vẻ như servletFilters không hoạt động với/_ah/api-URL. – icyerasor

Trả lời

5

Tôi không muốn sử dụng oAuth, nhưng là một hình thức xác thực đơn giản hơn với người dùng/mã thông báo. Vì vậy, những gì tôi đã làm là tạo một ServletFilter tùy chỉnh để ánh xạ tới/_ah/spi/* và chặn thông tin đăng nhập từ HTTPServletRequest ở đó, nếu đó là một Endpoint-API-Request (Yêu cầu Endpoint-API).

Dường như làm việc cho đến nay, nhưng không thực sự chắc chắn nếu đó là con đường để đi. Nhưng vì tôi đã không tìm thấy ví dụ nào cho non-oAuth-Auth ở bất kỳ đâu, đó là ảnh tốt nhất của tôi.

Rất thích nhận được một số gợi ý thực hành tốt nhất từ ​​@bossylobster hoặc @Dan Holevoet.

Các vấn đề liên quan