2013-05-10 11 views
8

Tôi đang cố gắng bọc đầu xung quanh OAuth2 và Perl (ví dụ: Net :: OAuth2) - cụ thể, thiết lập API RESTful cho cơ sở dữ liệu và ứng dụng sử dụng nó.Làm thế nào để bạn viết một máy chủ OAuth2 trong Perl?

Perl Oauth2 package dẫn tôi đến Net :: OAuth2.

Như gần như tôi có thể hình dung, có một vài điều tôi cần phải làm (hãy sửa lại cho tôi nếu tôi tắt trong cỏ dại ở đâu đó):

  1. Server-side: xây dựng các máy chủ REST của (hiện đang chơi với mojolicious cho điều này), mà nói chuyện với cơ sở dữ liệu.
  2. Server-side: xây dựng máy chủ xác thực/uỷ quyền (??)
  3. Khách hàng ứng dụng: sử dụng WWW :: mechanize (hoặc một số ví dụ) để nói chuyện với các máy chủ REST của

Trong đầu tôi, đây là cách hoạt động:

  1. ứng dụng client có khóa API (? đăng ký với máy chủ (REST máy chủ Auth server), và “nướng trong” cho khách hàng)
  2. người dùng có một mục nhập (username và mật khẩu) trong một bảng trong cơ sở dữ liệu trên máy chủ
  3. người dùng kích hoạt ứng dụng khách và cố truy cập tài nguyên được bảo vệ (nói để cập nhật hàng) (ví dụ: bằng cách chọn tùy chọn trình đơn "làm điều này" trong ứng dụng khách; khách hàng dịch đó vào API REST URI, ví dụ như http://the.rest.server/api/thisthing)
  4. máy chủ chuyển hướng khách hàng để() chút xác thực/uỷ quyền của máy chủ
  5. máy chủ, khách hàng, và người sử dụng làm một điệu nhảy OAuth ma thuật để xác thực người dùng
  6. máy chủ, ứng dụng khách và người dùng thực hiện một điệu nhảy OAuth ma thuật khác để đảm bảo người dùng được phép xem tài nguyên đó URI
  7. nếu mọi thứ đều tốt, máy chủ sẽ chuyển hướng khách hàng đến URI tài nguyên được yêu cầu ban đầu bất cứ điều gì auth parms là cần thiết).

Đó có phải là đánh giá hợp lý về quy trình không?

Nếu có, sẽ có ý nghĩa hơn khi có "xác thực/ủy quyền" như một phần của máy chủ REST hoặc máy chủ hoàn toàn riêng biệt? (trên cùng một phần cứng).

Net::OAuth2::Profile::WebServer giải thích độc đáo những gì phải xảy ra ở phía ứng dụng khách.

Các thử nghiệm trong http://cpansearch.perl.org/src/MARKOV/Net-OAuth2-0.55/t/ (trừ khi tôi là thực sự thiếu thứ gì đó) đang làm việc với Net :: Hồ sơ máy chủ web OAuth2, một lần nữa sẽ là “ứng dụng khách”. Có các ví dụ khác để viết máy khách - kết nối với máy chủ OAuth2 hiện có, chẳng hạn như công cụ Google API - nhưng tôi không thể tìm thấy ví dụ về cách viết máy chủ .... (Tôi sẵn sàng RTFM) , nếu tôi có thể tìm thấy các con trỏ ... được đánh giá cao!)

Trả lời

4

Ý tưởng chung là để cho một máy chủ auth trung tâm để xử lý các thông tin + thế hệ thẻ + chính sách xử lý (chính sách => là này ứng dụng ủy quyền của người sử dụng này).

Trước tiên, hãy nói về máy chủ OAuth.
i) Máy chủ chịu trách nhiệm về trang đăng nhập mà người dùng có thể nhập bằng chứng xác thực của mình.
ii) Xác thực thông tin đăng nhập, nếu chính xác máy chủ này, sau đó kiểm tra xem ứng dụng khách nào đã thực hiện cuộc gọi và xác minh xem "là ứng dụng được ủy quyền này bởi người dùng này". - Ở đây có khái niệm về phạm vi.
iii) Tạo mã thông báo truy cập/mã ủy quyền cho ứng dụng.
iv) Khi API được khách hàng truy cập bằng mã thông báo truy cập, API phải chuyển mã thông báo nội bộ đến máy chủ này. Đó là công việc của máy chủ này để xác minh nội dung mã thông báo.

Bây giờ, API
i) Các API nên chấp nhận token từ một ứng dụng client, vượt qua nó đến máy chủ - lấy một ID khách hàng duy nhất từ ​​máy chủ và trả lại dữ liệu cho khách hàng cho khách hàng đó.

Đối với Ứng dụng của bên thứ ba,
i) Bạn cần phải có quy trình đăng ký. Khách hàng cần phải có id khách hàng và bí mật. Google cho phép bạn đăng ký trong số console.
ii) Cần có phạm vi ánh xạ tới từng API duy nhất. Ví dụ: khi bạn tạo ứng dụng Google OAuth, bạn cần đăng ký ứng dụng của mình cho phạm vi - phạm vi là G +, picasa, google drive, v.v.
iii) Mã thông báo truy cập là duy nhất đối với phạm vi và bản đồ đối với các quyền được cấp cho ứng dụng của bạn người dùng. Nếu ứng dụng khách của người dùng chỉ chọn phạm vi G + và được người dùng cấp quyền truy cập - ứng dụng chỉ có thể sử dụng mã thông báo cho điểm cuối G +.

Một câu trả lời chi tiết về làm thế nào để thực hiện một máy chủ OAuth có thể được tìm thấy ở đây: How would an efficient OAuth2.0 server/provider work?

+0

Cảm ơn, divyanshm - có ý nghĩa. – bibliophylum

+1

Tôi cũng đã tìm thấy mô-đun Perl cũ hơn (không bị ảnh hưởng?): [OAuth :: Lite :: Server] (http://search.cpan.org/~lyokato/OAuth-Lite-1.31/lib/OAuth/Lite /Server/mod_perl2.pm) ... tôi nghĩ tôi sẽ tham chiếu nó ở đây cho độc giả trong tương lai. – bibliophylum