2011-09-04 40 views
7

Tôi có một ứng dụng dịch vụ web WCF được xây dựng và thử nghiệm trên IIS7. Về xác thực, tôi muốn thực hiện một máy chủ sql được lưu trữ trên máy chủ và xác thực mật khẩu người dùng cho người tiêu dùng truy cập vào các hoạt động trong dịch vụ web. Tuy nhiên, tôi đã nói rằng chính sách của công ty tôi ra lệnh rằng tôi triển khai SAML vào dịch vụ web của mình. Điều đó có nghĩa là bất kỳ khách hàng nào đang truy cập vào các hoạt động dịch vụ web của tôi cần phải được xác thực bằng SAML 2.0. Tôi không quen thuộc với SAML nhưng muốn biết và bắt đầu làm thế nào để thực hiện nó trong serivice web của tôi. Tôi tiếp tục nghe hai điều khoản - Nhà cung cấp dịch vụ và Nhà cung cấp nhận dạng, dựa trên các định nghĩa trên web, tôi giả sử nhà cung cấp dịch vụ là dịch vụ web của tôi. nhà cung cấp nhận dạng là nơi người dùng xác thực và nhà cung cấp danh tính cung cấp xác nhận cho dịch vụ web của tôi và sau đó tôi cho phép khách hàng truy cập vào các hoạt động. Tôi hiểu lý thuyết nhưng không chắc chắn làm thế nào để đưa vào thực hiện thực tế. Khách hàng truy cập vào dịch vụ web của tôi không phải là nội bộ, tức là chúng là bên ngoài (máy khách extranet), vì vậy trong trường hợp này, nhà cung cấp danh tính là gì và làm cách nào để thêm mã vào serice web của tôi để biến nó thành nhà cung cấp dịch vụ?Cách tích hợp xác thực SAML vào ứng dụng dịch vụ web WCF

Tôi hy vọng bạn hiểu được tình huống khó xử của tôi, bất cứ ai có thể giải thích cách tiếp cận tôi cần thực hiện và bất kỳ mẫu hoặc hướng dẫn nào giúp tôi hoàn thành dịch vụ web được đánh giá cao.

Trả lời

4

Tôi nghĩ SAML 2.0 không được cung cấp bởi WCF chuẩn. Để làm cho nó hoạt động, bạn phải kết hợp WCF với WIF (nền tảng nhận dạng Windows). Ở đây bạn có very complex example sử dụng WCF với WIF và ủy quyền dựa trên yêu cầu. Ví dụ này sử dụng SAML 1.1 nhưng nó chỉ là thay đổi cấu hình để làm cho nó hoạt động với SAML 2.0.

Sự cố của bạn thường được gọi là Xác thực liên kết hoặc Danh tính liên kết nơi người dùng xác thực với STS (dịch vụ mã thông báo dịch vụ) và nhận mã bảo mật (có thể là mã thông báo SAML ví dụ). Hơn so với khách hàng gọi dịch vụ thực (RP - relaying party), nơi nó vượt qua mã thông báo bảo mật của nó. Vậy bạn sẽ xây dựng cái gì? Nếu chính sách công ty của bạn yêu cầu sử dụng SAML, hầu hết họ có thể đã có STS và bạn chỉ cần xác thực khách hàng bằng mã thông báo SAML như đã đề cập trong bài viết.

+0

Bạn chính xác, chúng tôi có STS. Vì vậy, để xác thực khách hàng bằng cách sử dụng mã thông báo saml, là ví dụ bạn cung cấp cách để đi? – wcfvemi

2

Kể từ năm 2011, hỗ trợ cho Dịch vụ WCF yêu cầu bồi thường có apparently improved với bản phát hành .NET 4.5. Tôi sẽ sao chép thông tin từ bài viết đó trong trường hợp nó bao giờ thay đổi, nhưng tính đến thời điểm câu trả lời này, quá trình này dường như là đơn giản như:

  1. Thêm một tham chiếu đến WIF (Microsoft.IdentityModel.dll) trong WCF của bạn Dự án dịch vụ. Vì điều này được phân phối với .NET 4.5, tôi không tin rằng gói NuGet là cần thiết.

  2. Sử dụng mẫu mã sau đây để tạo ra một dịch vụ Claims-Aware tự lưu trữ:

    var host = mới ServiceHost (typeof (ClaimsAwareWebService), mới Uri ("myUri")); FederatedServiceCredentials.ConfigureServiceHost (máy chủ);

    host.Open();

  3. Đặt dịch vụ WCF của bạn để sử dụng Tiện ích mở rộng hành vi federatedServiceHostConfiguration.

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