2012-02-28 37 views
6

Trong việc thiết kế và tìm hiểu về ASP.NET Web API, tôi đã gặp một số thách thức mà tôi muốn một số trợ giúp và thảo luận.ASP.NET Web Api - Ủy quyền từ các giá trị chuỗi truy vấn và bảo mật API

Lấy cảm hứng từ điều này excellent post về thiết kế API REST an toàn mà không có OAuth Tôi tự hỏi cách tốt nhất để tiếp cận xác thực các mã thông báo và thông tin khác nhau mà tôi định yêu cầu.

Tóm tắt là tôi sẽ được yêu cầu (trong chuỗi truy vấn) các thông tin sau đây ..

  • dùng id
  • api key
  • timestamp
  • một hash chữ ký dựa trên một bí mật khóa người dùng đã được phát hành và băm cùng với các giá trị yêu cầu

Câu hỏi/thắc mắc của tôi là:

Nếu đây là cách tiếp cận âm thanh, cách tốt nhất để thực hiện điều này bằng ASP.NET Web API là gì? Tôi hiện đang nghĩ về việc sử dụng thuộc tính tùy chỉnh mà tôi có thể đánh dấu phương pháp của mình, loại thuộc tính Authorize lấy yêu cầu từ chuỗi truy vấn hoặc đối tượng loại POCO chứa tất cả các giá trị và tôi có thể sử dụng để giữ tất cả mã loại ủy quyền ở một nơi.

Có ai có kinh nghiệm hoặc suy nghĩ về điều này không?

Cảm ơn :)

+0

Bạn có thể gọi mã xác thực của mình trong trình xử lý toàn cục Begin_Request hoặc trình xử lý toàn cục Authenticate_Request. –

Trả lời

5

Hiện nay, như bạn có thể thấy, cách tiếp cận AuthorizeAttribute được sử dụng trong Web API. Tôi nghĩ rằng đây là một cách tiếp cận khá tốt ở chỗ chúng ta có thể đặt thuộc tính này vào các mục riêng lẻ cần được cho phép.

Tôi đã thực hiện ủy quyền bằng cách mở rộng System.Web.Http.Filters.AuthorizationFilterAttribute. Sau khi bạn mở rộng nó, tất cả các chi tiết ủy quyền tùy thuộc vào bạn và bạn có nhiều cách tiếp cận để lựa chọn.

+0

bạn có ví dụ không? – daanl

+0

Chắc chắn. BasicAuthorizationFilterAttribute của tôi mở rộng System.Web.Http.Filters.AuthorizationFilterAttribute và sau đó ghi đè phương thức OnAuthorization. Vì phương thức OnAuthorization chấp nhận HttpActionContext làm tham số của nó. Đối tượng này cho phép tôi truy cập vào thông điệp yêu cầu và lấy dữ liệu cần thiết từ đó (HttpRequestHeaders.Authorization header trong trường hợp này). Từ đó, giá trị phải được kiểm tra. Nếu nó hợp lệ, phương thức trả về. Nếu không, phương thức gán đối tượng actionContext.Response và phản hồi "ủy quyền không thành công" sẽ được trả về. –

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