2011-11-22 31 views
5

Chúng tôi đang xây dựng một dịch vụ web với WCF trên .net 4.0. Dịch vụ này sẽ được sử dụng chủ yếu bởi một lối vào ASP.net MVC, nhưng cũng sẽ được sử dụng bởi một ứng dụng Windows .net.Chiến lược tốt nhất để chuyển mã thông báo/cookie đến dịch vụ WCF?

Tên người dùng cơ bản/mật khẩu được cung cấp sẽ không làm vì chúng tôi không muốn lưu thông tin xác thực người dùng, vì vậy tôi đã nghĩ đến việc xác thực một lần và tạo mã thông báo đơn giản (hoặc tôi nên gọi nó là cookie?) Với RNGCryptoServiceProvider .GetBytes() và sau đó sử dụng nó để xác thực các yêu cầu khác.

Tôi đã nhìn vào các phương pháp phổ biến khác nhau để làm an ninh với WCF và họ chủ yếu dường như quá phức tạp, đặc biệt là khi tất cả chúng ta muốn làm chủ yếu là thông qua một cookie cho mỗi lời gọi phương thức.

Điều gì sẽ là chiến lược tốt nhất để vượt qua cookie này từ một khách hàng WCF với các dịch vụ WCF của chúng tôi? Phương pháp ưa thích sẽ được kết hợp chặt chẽ với kiến ​​trúc an ninh của WCF nhất có thể.

Cho đến nay, tôi đã dựa vào việc sử dụng custom HTTP headers hoặc custom authorization nhưng tôi không thuyết phục đó là phương pháp phù hợp hơn, nếu có.

Hãy ghi nhớ rằng cho trang web ASP, một kênh mới sẽ được tạo ra cho mọi yêu cầu, trong khi nó sẽ được tái sử dụng trên các ứng dụng Windows.

+1

này không có gì để làm với C, tôi tháo thẻ. –

+0

@JoachimPileborg Tôi chỉ gắn thẻ nó C# để biểu thị tùy chọn của tôi cho bất kỳ mẫu mã nào nhận được. Tôi có nên chỉ định điều này trong mô tả thay thế không? –

+0

Do nhầm lẫn bạn đã gắn thẻ C, không phải C#. Bạn có thể thêm thẻ nếu muốn. –

Trả lời

3

IMO có hai cách để thực hiện an ninh WCF, Giao thông vận tải hoặc Thông tin về.

Bạn có thể thực hiện thẩm định loại tên trong ứng dụng của bạn. Vì vậy, phía khách hàng sẽ phải điền vào tên người dùng và mật khẩu để gửi tin nhắn. nên bắt buộc đối với các mặt hàng khác sẽ như thế nào

<security mode="TransportWithMessageCredential"> 
    <message clientCredentialType="UserName"/> 
</security> 

Về phía server bạn có thể thực hiện xác nhận mật khẩu của riêng bạn, như thể hiện trong này example

làm điều này sẽ xác thực thông điệp của bạn trên máy chủ, bạn có thể thực hiện bất kỳ logic nào bạn muốn để xác thực mật khẩu của mình. sử dụng thông điệp này của bạn sẽ được mã hóa bằng cách sử dụng ssl và được xác thực bằng cách sử dụng logic của riêng bạn được triển khai ở phía dịch vụ.

+0

Điều này thực sự là những gì tôi đã nhìn vào, nhưng tôi có một chút lo lắng về hiệu suất hit tôi có thể bị ảnh hưởng do tạo kênh mới cho mọi yêu cầu đến. Bất kỳ suy nghĩ về điều đó? –

+1

tôi không nghĩ rằng bạn sẽ phải đối mặt với bất kỳ vấn đề hiệu suất vì tạo ra các kênh mới WCF là khá có khả năng chăm sóc đó trong hầu hết các kịch bản –

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