Đó là một câu hỏi thú vị mà bạn đã hỏi. Tôi biết rằng vì lý do gì đó, Microsoft đã đưa ra khuôn khổ "Windows Identity Foundation" này mà không cần nhiều tài liệu. Tôi biết điều này bởi vì tôi đã được giao nhiệm vụ tìm ra cách sử dụng nó với một dự án mới và tích hợp nó với cơ sở hạ tầng hiện có. Tôi đã tìm kiếm trên web trong nhiều tháng để tìm kiếm thông tin tốt.
Tôi đã lấy một góc hơi khác để giải quyết vấn đề bạn mô tả.
Tôi đã đăng ký ứng dụng hiện có và tích hợp hệ thống ống nước WIF của Microsoft vào đó. Bằng cách đó, tôi có nghĩa là tôi có một ứng dụng mà người dùng đăng nhập. Ứng dụng đăng nhập gửi thông tin xác thực do người dùng cung cấp đến máy chủ khác trả về danh tính người dùng (hoặc cho biết lỗi đăng nhập).
Nhìn vào một số ví dụ của Microsoft, tôi thấy rằng họ làm như sau: Xây dựng một SignInRequestMessage
từ một chuỗi truy vấn (được tạo ra bởi một ứng dụng bên dựa), xây dựng một dịch vụ bảo vệ token từ một lớp tùy chỉnh, và cuối cùng gọi FederatedSecurityTokenServiceOperations. ProcessSignInresponse với httpcontext.response hiện tại. Thật không may, tôi thực sự không thể giải thích tốt ở đây; bạn thực sự cần phải xem xét các mẫu mã.
Một số mã của tôi rất giống với mẫu mã. Nơi bạn sẽ quan tâm đến việc thực hiện rất nhiều logic của riêng bạn là trong GetOutputClaimsIdentity
. Đây là hàm xây dựng nhận dạng xác nhận quyền sở hữu mô tả người dùng đã đăng nhập.
Bây giờ, đây là những gì tôi nghĩ bạn thực sự muốn biết. Đây là những gì Microsoft không cho bạn biết trong tài liệu của họ, AFAIK.
Khi người dùng đăng nhập, họ sẽ được chuyển hướng trở lại ứng dụng của bên phụ thuộc. Bất kể ứng dụng đăng nhập hoạt động như thế nào, các lớp WIF sẽ gửi phản hồi tới trình duyệt của người dùng có chứa đầu vào HTML "ẩn" có chứa chứng chỉ ký mã thông báo và xác nhận quyền sở hữu của người dùng. (Các tuyên bố sẽ được trong văn bản rõ ràng). Khi kết thúc phản hồi này là chuyển hướng đến trang web của bên bạn.Tôi chỉ biết về hành động này vì tôi đã chụp nó với "Fiddler"
Khi trở lại trang web của bên phụ thuộc, các lớp WIF sẽ xử lý phản hồi (trước khi bất kỳ mã nào của bạn được chạy). Chứng chỉ sẽ được xác nhận. Theo mặc định, nếu bạn đã thiết lập trang web của bên dựa vào FedUtil.exe (bằng cách nhấp vào "Thêm tham chiếu STS trong ứng dụng bên của bạn từ Visual Studio), lớp của Microsoft sẽ xác minh dấu vân tay chứng chỉ. Khung công tác WIF đặt cookie trong trình duyệt của người dùng (Theo kinh nghiệm của tôi, tên cookie bắt đầu bằng "FedAuth") chứa các xác nhận quyền sở hữu của người dùng. xác nhận quyền sở hữu của người dùng trong trang web của bên phụ thuộc bằng cách sử dụng ClaimsAuthenticationClass
. Đây là nơi mà mã của bạn đang chạy lại.
Tôi biết điều này khác với những gì bạn mô tả, nhưng tôi có thiết lập này hoạt động. Tôi hi vọng cái này giúp được!
ps. Vui lòng xem các câu hỏi khác tôi đã hỏi về Windows Identity Foundation.
UPDATE: Để trả lời câu hỏi trong bình luận dưới đây:
Một điều mà tôi rời ra là chuyển hướng đến các STS log-on ứng dụng xảy ra bằng cách chuyển hướng với một truy vấn-chuỗi chứa URL của ứng dụng mà người dùng đang đăng nhập. Chuyển hướng này xảy ra tự động trong lần đầu tiên người dùng cố truy cập trang yêu cầu xác thực. Ngoài ra, tôi tin rằng bạn có thể thực hiện chuyển hướng theo cách thủ công với mô-đun WSFederationAuthentication
.
Tôi chưa bao giờ cố gắng để làm điều này, nhưng nếu bạn muốn sử dụng một log-on trang trong ứng dụng riêng của mình, tôi tin rằng khuôn khổ nên cho phép bạn sử dụng như sau:
1) đóng gói STS của bạn mã trong thư viện. 2) Tham khảo thư viện từ ứng dụng của bạn. 3) Tạo trang đăng nhập trong ứng dụng của bạn. Đảm bảo rằng trang đó không yêu cầu xác thực. 4) Đặt thuộc tính tổ chức phát hành của phần tử wsFederation
trong phần Microsoft.IdentityModel
của web.config của bạn vào trang đăng nhập.
cảm ơn Eugenio, tôi nghĩ rằng tôi đã đọc Hướng dẫn nhận dạng bản quyền, rõ ràng không phải là tôi đã bỏ lỡ Fabrikam là một ứng dụng MVC. Tôi chắc chắn sẽ có một cái nhìn vào nó một lần nữa. Tôi cũng đã có một cái nhìn tại blog của Dominick Baier và nghĩ rằng thực hiện một cuộc gọi đến một sts hoạt động từ máy chủ web trên trang đăng nhập là cuối cùng những gì tôi sau. –
Tôi không thấy rằng bằng cách sử dụng WIF trong ASP.net MVC là bất kỳ khác với việc sử dụng các hình thức ASP.net. –
Các nguyên tắc chính xác giống nhau. Chỉ có một vài chi tiết triển khai. Sự khác biệt phổ biến nhất là: -Trong ứng dụng biểu mẫu web, bạn thường dựa vào WIF cho tất cả trao đổi giao thức (passiveRedirectEnable = true). Trong một ứng dụng MVC, bạn sẽ tắt tính năng đó và xử lý theo chương trình như được giải thích trong bài đăng blog của tôi. - Trong ứng dụng MVC, bạn thường triển khai thuộc tính IAuthorizationFilter. Trong các biểu mẫu Web, không tồn tại và bạn chỉ cần dựa vào cơ chế ủy quyền ASP.NET hiện có (hoặc gọi IsInRole, v.v.) –