2011-10-12 21 views
11

Tôi muốn xác thực người dùng dịch vụ nghỉ ngơi servicestack.net của tôi bằng cách sử dụng auth cơ bản qua HTTPS.Làm cách nào để tôi có thể thực hiện cuộc gọi còn lại trên ServiceStack.net qua HTTPS?

Mọi người có thể giải thích cách phần https này hoạt động hoặc hướng tôi đi đúng hướng không? Có trách nhiệm của khách hàng để đảm bảo các cuộc gọi được thực hiện qua https? Tôi có cần phải làm bất cứ điều gì liên quan đến Chứng chỉ SSL để kích hoạt tính năng này không?

Dịch vụ này rất có thể sẽ hoạt động trên AppHarbor nếu có vấn đề.

EDIT

bất cứ ai có thể trích dẫn ví dụ cụ thể về cách thức để thực hiện điều này phục vụ chồng. Tôi nghĩ rằng tôi sẽ có tất cả các dịch vụ trong api của tôi yêu cầu HTTPS. Tôi có thể thực hiện việc này bằng bộ lọc yêu cầu không?

+0

tôi không thực hiện thay đổi nhưng bạn có thể muốn đặt câu hỏi tiếp theo hoặc gắn thẻ câu hỏi này với appharbor để cảnh báo cộng đồng appharbor, chúng khá hữu ích. – Dan

Trả lời

8

Bạn sẽ cần có Chứng chỉ SSL được mua và cài đặt để xử lý https (bạn sẽ có thể nhận được chứng chỉ từ nhà cung cấp tên miền, sau đó bạn sẽ cần phải cài đặt trên máy chủ lưu trữ của mình). Các khách hàng dịch vụ nói chung sẽ được phép kết nối bằng bất kỳ phương thức nào họ chọn. Bạn có trách nhiệm dừng yêu cầu và tạo thông báo lỗi cho khách hàng nếu họ cố gắng kết nối bằng http, thay vì cho phép họ truy cập.

Bạn có thể xác thực xem chúng có trên http hoặc https hay không bằng cách kiểm tra thuộc tính Request.Url.Scheme trong API dịch vụ REST của bạn. Thông thường, yêu cầu http trên một dịch vụ yêu cầu https sẽ trả lại mã trạng thái HTTP 403 (bị cấm). Nếu bạn có quyền truy cập vào IIS, bạn có thể buộc HTTPS một cách dễ dàng mà không làm bất kỳ mã hóa: http://www.sslshopper.com/iis7-redirect-http-to-https.html

+2

Cảm ơn thông tin. Tôi nghĩ rằng tôi sẽ cần thêm một chút thông tin về việc thực hiện điều này đặc biệt trong servicestack.net. Tôi sẽ không có quyền truy cập vào các thiết lập này trong IIS thông qua appharbor theo như tôi biết. – stephen776

+0

@ stephen776- u có thể thực hiện điều này trên servicestack không? Cho rằng đó là một vài năm trước đây, những gì đã được kinh nghiệm của bạn với SS và https? –

2

Nếu bạn không cần phải trên tất cả các dịch vụ như sau ở phía trên cùng của bất kỳ dịch vụ mà cần sự an toàn không công việc:

if (!Request.IsSecureConnection) 
    { 
     throw new HttpError(HttpStatusCode.Forbidden,"403","HTTPS ONLY"); 
    } 

Tuy nhiên nó tốt hơn để này như một thuộc tính lọc: https://github.com/ServiceStack/ServiceStack/wiki/Filter-attributes

Nếu bạn muốn nó trên toàn cầu, bạn có thể áp dụng thuộc tính của bạn đến một BaseService chia sẻ hoặc tốt hơn sử dụng một bộ lọc toàn cầu: https://github.com/ServiceStack/ServiceStack/wiki/Request-and-response-filters

... Như thế này:

this.GlobalRequestFilters.Add((req, res, dto) => 
{ 
    if (!req.IsSecureConnection) 
    { 
     res.StatusCode = (int)HttpStatusCode.Forbidden; 
     res.Close(); 
    } 
}); 

Nếu bạn muốn một trong đó chuyển hướng đến https thay vì từ chối yêu cầu thì bạn có thể căn cứ trên đây: http://weblogs.asp.net/dwahlin/requiring-ssl-for-asp-net-mvc-controllers

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