2009-05-06 38 views
13

Tôi đã viết một webservice .NET đơn giản, mà tôi sẽ được lưu trữ trên một máy chủ khác có thể ở trên lục địa khác nhau. Tôi thực sự không biết. Bây giờ, tôi chỉ có URL của nó và tôi đã cố gắng sử dụng phương thức webrequest và webresponse để truy cập vào dịch vụ web HTTP POST đó. Bây giờ, tôi muốn biết là có cách nào để bảo đảm truy cập webservice, để không ai có thể khai thác nó?Cách bảo mật dịch vụ web trong .net?

ví dụ:

http://example.com/Verify/Verification.asmx/Verify?AccountNumber=3223&ProductName=876

Bây giờ, đây là tất cả các thông số cần thiết để gọi webservice này. Như thể bây giờ, ai cũng có thể khai thác nó. Vì vậy, làm thế nào tôi có thể làm cho nó an toàn? Mặc dù, tôi đang lập kế hoạch để có được SSL và toàn bộ điều này đang xảy ra từ máy chủ đến máy chủ, không phải từ khách hàng đến máy chủ?

+0

THANKS MỌI NGƯỜI .. HẠNH PHÚC MỪNG. – Mohit

Trả lời

9

Bạn có thể chuyển khóa dịch vụ (giống như Amazon WS) trong tiêu đề ủy quyền của yêu cầu web có thể được mã hóa bằng thuật toán bạn chọn, sau đó được giải mã ở cuối dịch vụ và chỉ tiếp tục thực hiện chìa khóa phù hợp

Xem phần 14,8 trong URL sau

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

+0

Cảm ơn, nó có ý nghĩa. Có điều gì khác, tôi có thể làm để làm cho nó an toàn hơn không?Nếu yêu cầu từ khách hàng được thực hiện ở chế độ SSL thì yêu cầu này cũng sẽ được thực hiện trong SSL từ máy chủ đến máy chủ, hoặc tôi có phải bật nó một cách cụ thể không? Xin lỗi, vì đã đặt quá nhiều câu hỏi. Cảm ơn. – Mohit

+1

Tôi tin rằng bạn sẽ cần một chứng chỉ SSL cho máy chủ để truyền thông máy chủ. Việc kết hợp với tiêu đề ủy quyền được mã hóa phải là tất cả những gì bạn cần –

1

Thật không may, bạn không có nhiều lựa chọn vì bạn đã sử dụng công nghệ dịch vụ web ASMX cũ. Cách duy nhất để xác thực người nào đó với dịch vụ web ASMX, qua Internet, về cơ bản là số tiền "tự làm".

Nếu tôi phải làm điều này, tôi muốn sử dụng WCF và tự cung cấp một số tùy chọn. Nếu tôi không thể sử dụng WCF, thì tôi sẽ tạo một tiêu đề HTTP tùy chỉnh để chuyển tên người dùng và mật khẩu (qua SSL!) Và xác thực chúng trên máy chủ. Cách khác, tôi muốn sử dụng chứng chỉ trên máy khách và yêu cầu chúng được gửi đến máy chủ. IIS thậm chí có thể biến chứng chỉ ứng dụng khách thành các bản sắc Windows trên máy chủ.

+0

WCF ... Tôi nghĩ rằng tôi có thể xem xét điều đó. Nhưng tôi vẫn cần truy cập thông qua URL, đó là giới hạn của tôi. Xin hãy giúp tôi nếu bạn có thể. Bất kỳ liên kết nào cũng sẽ là đủ. cảm ơn. – Mohit

+0

Trung tâm nhà phát triển WCF trên MSDN có tại http://msdn.microsoft.com/WCF/. WCF nên được sử dụng thay vì ASMX cho tất cả phát triển dịch vụ web mới. –

1

Thông thường những gì bạn đã sử dụng để bảo mật Dịch vụ web .NET trước WCF là của Microsoft Web Service Extensions (WSE), hiện tại phiên bản 3.0. Tôi đã sử dụng nó thành công trong một sản phẩm thương mại có sẵn, và nó là khá tốt vì nó được dựa trên các tiêu chuẩn w3C ws- *. Có thể kết nối thành công với điều đó từ các máy khách .NET (rõ ràng) nhưng cũng từ các máy khách Java nếu bạn sử dụng Apache Axis. Tải về tại địa chỉ:

http://www.microsoft.com/downloads/details.aspx?FamilyID=018a09fd-3a74-43c5-8ec1-8d789091255d&displaylang=en

+0

Tôi khuyên bạn nên chống lại thậm chí _thinking_ về WSE! WSE khá lạc hậu, đã được thay thế bởi WCF. Không sử dụng WSE trừ khi bạn không có lựa chọn nào cả. –

+3

Đó là lý do tại sao tôi viết/trước/WCF ... Câu hỏi ban đầu dường như đề cập đến các dịch vụ web .NET truyền thống. Tất nhiên tôi cũng muốn giới thiệu WCF nếu có sự lựa chọn. –

+0

Chỉ cần _please_ cẩn thận khi đề cập đến WSE - điều gì sẽ xảy ra nếu ai đó đọc quyết định này sử dụng _use_? Đó là lý do tại sao tôi đặt nó theo những thuật ngữ rõ ràng - "chỉ khi bạn không còn lựa chọn nào khác". Tôi không muốn cơ hội ai đó sử dụng nó bởi vì "nó sử dụng các tập tin .ASMX" hoặc "WCF là quá tiên tiến" hoặc bất cứ điều gì như thế. WSE đã lỗi thời và không nên được sử dụng, ít nhất là không có dự án nào quan trọng. –

0

Chúng tôi làm một số hợp lý của dịch vụ Web và để đảm bảo chúng ta chỉ cần thêm một tên người dùng và mật khẩu để đối tượng yêu cầu của chúng tôi. Trong trường hợp của bạn, bạn chỉ có thể thêm 2 tham số mới cho tên người dùng và mật khẩu, hoặc đơn giản chỉ cần thêm một và sử dụng một cái gì đó giống như mã xác thực, bạn có thể làm phức tạp hoặc đơn giản như bạn muốn.

Một số ý tưởng đơn giản như danh sách GUID là khóa mật khẩu có thể chấp nhận được để mã hóa địa chỉ IP của máy chủ yêu cầu để mã xác thực chỉ hoạt động với địa chỉ IP được dịch vụ web xác minh.

+0

Rất đẹp .. Cảm ơn gợi ý .. Nhưng như những người khác nói, tôi sẽ cố gắng sử dụng WCF và xem nếu nó có lợi cho tôi không. Nếu không, tôi luôn có thể sử dụng đề xuất của bạn. Cảm ơn. – Mohit

0

Bạn cũng có thể tạo mã thông báo và chuyển mã thông báo này làm thông số cho mọi webmethod. Bạn có thể duy trì mã thông báo trong hashtable và xóa khỏi hashtable sau khi phiên bị bỏ qua.

Mã thông báo cần được tạo khi đăng nhập thành công. Để tạo id mã thông báo, tôi khuyên bạn nên sử dụng RNGCryptoServiceProvider.

+0

bạn đã nói: Bạn cũng có thể tạo mã thông báo và chuyển tokenid này làm thông số cho mọi webmethod. nếu tôi làm theo hướng dẫn của bạn để vượt qua mã thông báo với mỗi yêu cầu thì làm cách nào tôi có thể ngăn chặn trả lời đính kèm. kẻ tấn công cũng lấy những mã thông báo và gửi yêu cầu. hướng dẫn tôi. cảm ơn – Mou

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