2017-02-08 41 views
5

Tôi muốn xây dựng xác thực dựa trên mã thông báo cho API web của mình để cho phép các ứng dụng của bên thứ ba truy cập các API đó.Thực tiễn tốt nhất để xác thực API là gì?

Không có tương tác người dùng, không có đoàn đại biểu, vai trò và ứng dụng được kết nối được quản lý theo cách thủ công từ cổng quản lý.

Với những yêu cầu đó, cách tốt nhất để lấy mã thông báo jwt là gì?

Tôi có cần giao thức như OpenID hoặc OAuth2 hay chỉ đơn giản là hiển thị điểm cuối sử dụng APIKey và nó sẽ trả về mã thông báo bảo mật nếu APIKey hợp lệ?

+0

Cách tốt nhất là chia sẻ khóa bí mật với ứng dụng của bên thứ 3 và bên thứ 3 để xây dựng JWT từ phía họ dựa trên khóa bí mật, api của bạn chỉ xác minh mã thông báo. –

+0

@CuongLe bạn có thể vui lòng thêm nhận xét của bạn làm câu trả lời để thảo luận không? – Homam

+0

Nhận xét của tôi có thực sự giải quyết được vấn đề của bạn không? –

Trả lời

2

Vì vậy, tôi hiểu rằng yêu cầu của bạn là máy để giao tiếp bằng máy. Nếu Có, cách dễ nhất là triển khai "Luồng cấp chứng chỉ ứng dụng khách của OAuth 2.0" (tham khảo: documentation).

Phương pháp trên chỉ phù hợp nếu dữ liệu của bạn không chứa dữ liệu nhạy cảm cao.

Tùy chọn khác sẽ là triển khai toàn bộ máy chủ Ủy quyền sử dụng mã riêng hoặc sử dụng khung bên thứ 3 và thực hiện theo "Luồng cấp phép mã ủy quyền của OAuth 2.0" (tham khảo: documentation).

Tùy chọn này sẽ tốn kém và tôi khuyên bạn nên sử dụng tùy chọn đầu tiên.

+0

Trong luồng Grant, liệu client_credentials là tên người dùng/mật khẩu hoặc ID khách hàng/bí mật của khách hàng hay bất kỳ thứ gì như apikey? – Homam

+0

tên người dùng/mật khẩu cho mã ủy quyền Cấp lưu lượng và ID khách hàng/bí mật ứng dụng khách cho Thông tin đăng nhập của khách hàng Cấp lưu lượng. Nó cũng được giải thích trong liên kết tài liệu RFC được đề cập trong câu trả lời của tôi. –

5

Trước tiên, tôi muốn giải thích sự khác biệt giữa OAuth và OpenID. Người dùng adrianbanks tương phản với hai giếng trong số answer này. Tóm lại, OpenID là về xác thực - chứng tỏ bạn là ai. Trong khi OAuth là về ủy quyền - bạn có quyền truy cập vào chức năng, dữ liệu, ứng dụng của bạn hay không. Bây giờ, quay lại câu hỏi của bạn.

Cho dù bạn cần OAuth hay không, bạn nên xem xét các phần mềm trung gian OWIN (Open Web Interface for .NET). Chúng tôi hiện đang sử dụng OWIN để triển khai API mở của riêng chúng tôi với chức năng OAuth 2.0 Authorization Server. Tuy nhiên, OWIN không bị giới hạn khi triển khai máy chủ xác thực OAuth. Chắc chắn cung cấp cho nó một cái nhìn để xem nếu nó có thể phù hợp với nhu cầu của bạn.

Trong trường hợp của bạn, việc triển khai OAuth 2.0 có thể không cần thiết; tuy nhiên, đó là những gì tôi đang đề xuất. Đối với vấn đề này, nó là một giải pháp tốt, an toàn. Không chỉ giải quyết vấn đề này, nhưng trong tương lai, nếu bạn muốn cho phép người dùng ủy quyền tích hợp của bên thứ ba, OAuth - tùy chọn an toàn hơn - đã được triển khai.

Nếu bạn không có người dùng sử dụng tích hợp bên thứ ba, bạn có thể sử dụng khóa API. Miễn là bạn triển khai nó theo cách an toàn, đây là một lựa chọn tốt. Nếu điều này là nhiều hơn những gì bạn đang tìm kiếm, hãy đọc điều này post về cách sử dụng các khóa API để xác thực một cách an toàn (và ủy quyền) các ứng dụng của bên thứ ba cho một dự án ASP.NET Web API.

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