2013-09-26 372 views
5

Tôi cần tìm cách xác thực/ủy quyền người dùng trong dịch vụ WCF. Tôi đang sử dụng dịch vụ xác thực bên ngoài lưu trữ thông tin đăng nhập của người dùng.Xác thực và ủy quyền của người dùng WCF

Ví dụ: "Bob sử dụng phương thức đăng nhập của chúng tôi, chúng tôi gửi thông tin đăng nhập tới dịch vụ xác thực, dịch vụ cho chúng tôi biết nếu các thông tin đăng nhập này là chính xác". Nếu Bob gửi yêu cầu khác, chúng tôi cần biết liệu Bob đã được xác thực chưa.

Hiện tại, phiên đang được tạo trên máy khách, nhưng nó cần phải chuyển sang phía máy chủ. Chúng tôi không thể dựa vào khách hàng để bảo mật.

Điều này có thể được giải quyết bằng cách sử dụng cookie bảo mật hoặc bạn có đề xuất nào tốt hơn không?

EDIT! Tôi chỉ có thể sử dụng máy chủ xác thực và không có quyền truy cập vào nó

Overview

Trả lời

9

Vấn đề bạn đang mô tả là một trong những nổi tiếng mà có (ít nhất) hai giải pháp chuẩn hóa.

Federation sử dụng WS-Trust

Các tùy chọn đầu tiên là một SOAP một trụ sở có sử dụng liên đoàn hoạt động dựa trên WS-Trust. Trong giải pháp này:

  • Khách hàng của bạn cung cấp thông tin cho các dịch vụ xác thực
  • Nếu các chứng chỉ có giá trị, dịch vụ chứng thực trả về một mã thông báo đã ký (và được mã hóa) cho khách hàng. Nó được mã hóa để bất kỳ thông tin nào có trong mã thông báo vẫn được bảo mật - ngay cả khi khách hàng không thể đọc được. Nó được mã hóa bằng khóa công khai thuộc về dịch vụ WCF của bạn. Nó được ký với một khóa riêng thuộc về dịch vụ xác thực.
  • Khách hàng gửi mã thông báo đã ký/mã hóa cho dịch vụ WCF của bạn. Dịch vụ có thể giải mã nó vì nó giữ khóa riêng để giải mã. Nó có thể tin tưởng nó bởi vì nó được ký bởi dịch vụ xác thực.
  • Dựa trên nội dung của mã thông báo đã giải mã, dịch vụ có thể thiết lập danh tính khách hàng và đưa ra quyết định ủy quyền.

Trong mô hình này, các thuật ngữ thông thường là:

  • dịch vụ xác thực của bạn Dịch vụ An Mã
  • dịch vụ WCF của bạn là Dựa Đảng
  • khách hàng của bạn là Khách hàng

Điều này nghe có vẻ phức tạp, nhưng nó được hỗ trợ rất tốt trong .Net và WCF bằng Windows Identity Foundation. Có rất nhiều mẫu có sẵn nhiều của nó (có thể tất cả) có thể được thực hiện thông qua cấu hình WCF chứ không phải là mã.

Điều này rất phù hợp với các tình huống mà khách hàng có khả năng mã hóa (như máy khách Net của bạn) và nơi có các khung công tác tốt (như WIF). Nó không phải là quá tốt cho khách hàng spec thấp như trình duyệt và một số điện thoại, hoặc nơi bạn không kiểm soát của khách hàng.

Nó thường được sử dụng trong các kịch bản doanh nghiệp, bao gồm liên kết doanh nghiệp đến doanh nghiệp. Nó được sử dụng ít hơn trong các kịch bản internet.

thế mạnh của nó là

  • Nó được tiêu chuẩn hóa và do đó cũng thường được hỗ trợ bởi các khuôn khổ
  • Nó có nghĩa là dịch vụ WCF của bạn không bao giờ phải xử lý các thông tin khách hàng (= an toàn hơn)
  • Nó làm cho nó khá dễ dàng để chuyển sang các dịch vụ xác thực khác nhau (vì nó được chuẩn hóa). Ví dụ, trên tiền đề AD và Windows Azure AD cả hỗ trợ này, cũng như các dịch vụ bản sắc độc lập khác

Một cái nhìn tổng quan có thể tìm thấy ở đây:

http://msdn.microsoft.com/en-us/magazine/ee335707.aspx

Và Google sẽ cho bạn thấy nhiều hơn nữa hướng dẫn và ví dụ.

Federation Sử dụng OAuth 2

Trong giải pháp này:

  • Các khách hàng sẽ hiển thị một số giao diện người dùng được cung cấp bởi các dịch vụ xác thực (thường là một trang web)
  • Các người dùng nhập vào thông tin của họ trong đó Giao diện người dùng và dịch vụ xác thực xác thực và cuối cùng trả về mã thông báo cho khách hàng. Bản chất của mã thông báo không được tiêu chuẩn hóa, cũng không phải là mã thông báo có được mã hóa hay không. Nói chung nó sẽ được ít nhất là ký kết.
  • Khách hàng nộp mã thông báo với mỗi yêu cầu các dịch vụ WCF
  • Các dịch vụ WCF xác thực token như trong giải pháp trước

Trong thuật ngữ OAuth:

  • dịch vụ xác thực của bạn là Máy chủ ủy quyền
  • Dịch vụ WCF của bạn là Chủ sở hữu tài nguyên
  • Khách hàng của bạn là Khách hàng

Một lần nữa, điều này nghe có vẻ phức tạp, nhưng nó khá tốt được hỗ trợ trong Net. Có lẽ không phải là cũng như cách tiếp cận WS-Trust mặc dù vào lúc này. Nó được hỗ trợ bởi Windows Azure AD và phía máy khách, sử dụng Thư viện xác thực Windows Azure. Có thể các dịch vụ khác sử dụng phương pháp này - ví dụ: Facebook.

này hoạt động tốt nơi

  • Khách hàng của bạn là spec thấp hoặc không crypto-có khả năng (ví dụ một trình duyệt hoặc một số điện thoại)
  • Bạn không kiểm soát khách hàng (ví dụứng dụng của bên thứ ba đang truy cập dịch vụ của bạn)

Ứng dụng này thường được sử dụng trong ứng dụng internet mà bạn là chủ sở hữu dịch vụ WCF không nhất thiết phải biết người dùng hoặc khách hàng. Đó là một tiêu chuẩn ít hoàn chỉnh hơn theo một số cách (ví dụ: nó không xác định chính xác cách xác thực xảy ra) và do đó, việc chuyển sang các máy chủ ủy quyền thay thế ít dễ dàng hơn.

Các thế mạnh của nó là:

  • Nó là đơn giản hơn và do đó có hỗ trợ nền tảng rộng lớn hơn
  • Nó được trồng phổ biến và do đó sự hỗ trợ thư viện ngày càng tốt hơn tất cả các thời gian
  • Người dùng không bao giờ nhập thông tin đăng nhập của họ vào giao diện người dùng của bạn, chỉ vào máy chủ auth, do đó, nó có nhiều khả năng được tin cậy hơn (trong các tình huống Internet)
  • Nó được xây dựng theo cách kiểm soát phạm vi quyền được cấp cho khách hàng và thu hồi quyền, vì vậy ag ain nó là đáng tin cậy hơn trong một kịch bản Internet

Sự hỗ trợ chính thức Net cho điều này là trong thư viện Windows Azure AD xác thực

http://msdn.microsoft.com/en-us/library/windowsazure/jj573266.aspx

Có khác, các thành phần mã nguồn mở quá, chẳng hạn như DotNetOpenAuth

http://dotnetopenauth.net/

những giải pháp sẽ là tốt nhất cho bạn phụ thuộc chủ yếu vào bản chất của authent của bạn ication dịch vụ tôi sẽ nói. Và về việc bạn đang ở trong một doanh nghiệp hay viễn cảnh internet. Nếu auth. dịch vụ có thể dễ dàng thích nghi để trở thành một Dịch vụ Mã Thông báo An toàn của WS-Trust (STS), thì đó sẽ là một tuyến đường tốt. Nếu thêm một số giao diện người dùng web vào auth. dịch vụ là khả thi, OAuth có thể tốt hơn.

Hoặc, nếu không có lựa chọn nào khả thi, bạn chỉ có thể mượn các mẫu tạo thành một cách tiếp cận và sử dụng mà không cần đạt tiêu chuẩn đầy đủ.

Chúc may mắn!

+0

Cảm ơn bạn đã đăng bài phức tạp này. Tôi quên đề cập đến rằng tôi không có quyền truy cập vào máy chủ xác thực, tôi chỉ có thể sử dụng nó. Vì vậy, tôi sẽ cố gắng để làm cho riêng của tôi tokensystem – David

+0

LOL, OK. Như tôi đã nói, các mẫu sẽ hữu ích: o) –

+0

Tôi rất xin lỗi bro – David