2017-04-05 29 views
7

Tôi đang tạo API cho ứng dụng dành cho thiết bị di động bằng Rails 5. Hiện tại, tôi không cần ủy quyền ba chân vì API sẽ chỉ được tiêu thụ bởi ứng dụng dành cho thiết bị di động.Ưu điểm của việc sử dụng xác thực mật khẩu OAuth Cấp quyền xác thực truy cập mã thông báo

Tôi đang nghĩ đến việc lựa chọn một trong hai tùy chọn sau đây:

  1. kẻ giữ cửa + lập mưu: tôi có thể thực hiện OAuth 2.0 sử dụng kẻ giữ cửa, nhưng tôi sẽ chỉ được sử dụng Thông tin mật khẩu Grant, ít nhất là cho hiện nay.
  2. Riêng của Rails ActionController::HttpAuthentication::Token mô-đun + Phát triển: Điều này có vẻ như là cách đơn giản hơn.

Thành thật mà nói, tôi không thể thấy sự khác biệt giữa phương pháp Token Access AuthenticationOAuth 2.0's Password Credentials Grant.

Làm thế nào người ta có thể chọn cái kia? Có tùy chọn nào khác cần được xem xét không?

Trả lời

3

Hai là khái niệm thứ khác nhau:

  • "Mã truy cập Xác thực" chỉ định một giao thức mô tả làm thế nào một (có thể tồn tại lâu dài) token nên trình bày cho các máy chủ một cách an toàn. Nó không nói gì về mã thông báo đến từ đâu hoặc nó nên được giải thích như thế nào.
  • "Cấp chứng chỉ mật khẩu" là một phần của luồng OAuth chính thức, mô tả phương tiện nhận mã thông báo (thường ngắn ngủi).

Trong ý nghĩa, bạn có thể sử dụng Cấp chứng chỉ mật khẩu để nhận mã thông báo bằng OAuth và sau đó sử dụng mã thông báo này trong tiêu đề ủy quyền Token để truy cập. Câu hỏi sau đó trở thành - là hữu ích khi thực hiện thêm vòng tròn để trao đổi thông tin (vĩnh viễn và bí mật) cho mã thông báo (tạm thời), khi chúng tôi có thể sử dụng mã thông báo (vĩnh viễn và bí mật) được lưu trữ trong ứng dụng để cho phép ngay lập tức.

Như tôi thấy, có hai lợi ích tiềm năng của việc sử dụng luồng OAuth đầy đủ. Thứ nhất, nó cho phép bạn thêm các phương thức ủy quyền khác cho bên thứ ba một cách tự nhiên. Thứ hai, nó cho phép bạn thu hồi mã thông báo tại bất kỳ thời điểm nào và buộc ủy quyền lại bằng các phương tiện khác này (nếu bạn thực hiện chúng, tất nhiên) mà không phải phát minh ra bất kỳ bánh xe nào.

Mặt khác, bạn luôn có thể thêm bất kỳ phần "tạo mã thông báo" bổ sung nào sau này, khi cần. Do đó, nếu kế hoạch hiện tại của bạn là thông tin đăng nhập mã cứng trong mã anyway, tôi nghi ngờ bạn có thể tốt hơn không phụ thuộc vào ủy quyền Token.

Đây không chỉ là một yêu cầu ngắn hơn, nó cũng có thể hơi an toàn hơn so với xác thực Bearer sử dụng trong OAuth: nếu một kẻ tấn công ngửi một mã thông báo Bearer, họ sẽ (thường) nhận được đầy đủ access token đến máy chủ cho đến khi hết hạn . Nó không phải là trường hợp với Token mã thông báo (thông thường). Không phải tất cả vấn đề quá nhiều nếu kẻ tấn công có thể trích xuất bí mật được chia sẻ từ ứng dụng của bạn.

4

Nếu tất cả những gì bạn từng có là "API mục đích duy nhất" (chỉ dành cho ứng dụng di động), không có sự khác biệt lớn về mặt bảo mật. Tuy nhiên, nếu bạn muốn mở rộng API này để các dịch vụ bên ngoài sử dụng thì bạn sẽ ở vị trí tốt hơn nhiều với OAuth 2.0 được triển khai bằng cách sử dụng Doorkeeper, vì bạn có thể dễ dàng định cấu hình, ví dụ: Cấp quyền cho họ. Vì vậy, tôi muốn nói rằng tùy chọn "Doorkeeper + Devise" là tương lai hơn bằng chứng, bởi vì nó cung cấp nhiều tùy chọn hơn, trong khi HTTP Token authentication là đơn giản hơn nhiều để thực hiện.

+1

Đây cũng là những gì tôi nghĩ. Bạn có thể có bất kỳ nguồn nào giải thích không có sự khác biệt hữu ích giữa Xác thực mã thông báo HTTP và Cấp chứng chỉ mật khẩu OAuth 2.0 không? – hattenn

+1

Trên thực tế, bạn có thể nghĩ về 'Mã thông báo HTTP 'theo cách sam là kết hợp của' Tên người dùng: Mật khẩu' ... trong cả hai trường hợp, khách hàng phải lưu giữ chúng giữa các yêu cầu và gửi chúng lên mỗi yêu cầu. Bởi vì họ không hết hạn, bạn sẽ không bao giờ biết nếu ai đó đã đánh cắp nó và sử dụng nó trên đường đi. Mặt khác, điều này có thể dễ dàng được phát hiện với Cấp phép mã ủy quyền, được coi là an toàn hơn nhiều so với bất kỳ phiên bản nào trước đó. Có lẽ bạn tìm thấy một cái gì đó thú vị ở đây: http://softwareengineering.stackexchange.com/a/297997/238916 –

+1

Tôi hiểu rằng, nhưng tôi không nói về Grant Author Grant, tôi chỉ nói về Credentials Grant vs Token Password Xác thực truy cập. – hattenn

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