5

Giả sử tôi có ứng dụng giao diện người dùng muốn tìm nạp một số dữ liệu từ dịch vụ back-end. (Tôi làm.) Dịch vụ sẽ cần phải xác minh rằng người dùng cuối được xác thực, rằng nó được phép sử dụng dịch vụ và có thể lọc dữ liệu trả về dựa trên các đặc quyền của người dùng. Trong trường hợp của tôi, cả ứng dụng front-end và dịch vụ back-end đều dựa trên Azure ACS để xác thực.Có sử dụng mã thông báo người gửi SAML để xác thực người dùng cho các dịch vụ phụ trợ không?

Simple federated identity scenario

Lý tưởng nhất là front-end muốn hành động trên danh nghĩa của người sử dụng xác thực, mà âm thanh như một sự phù hợp tốt cho việc sử dụng một ActAs token (theo quy định tại WS-Trust). Tuy nhiên, nó chỉ ra rằng ACS does not currently support ActAs.

Cách giải quyết có thể là sử dụng mã thông báo mang thực tế (mã thông báo khởi động trong ứng dụng đầu cuối) để xác thực với dịch vụ back-end. It's not hard to do, nhưng nó sẽ là một ý tưởng tồi vì một lý do nào đó?

Trả lời

7

Từ ứng dụng đầu cuối, bạn chắc chắn có thể truyền dữ liệu danh tính của người dùng cuối bằng cách gửi mã thông báo hoặc gửi thuộc tính từ đó. Cả hai đều có vấn đề. Đối với trước đây, nếu nó cũng được mã hóa, mặt trước và mặt sau sẽ phải chia sẻ khóa riêng cần thiết để giải mã nó; họ cũng sẽ phải chia sẻ các hạn chế đối tượng, v.v ... để back-end xem xét mã thông báo hợp lệ cho nó. Nói cách khác, mặt trước và mặt sau sẽ là ONE dựa vào bên, không phải là hai. Có thể không phải là một vấn đề, nhưng hãy nhận biết. Trong trường hợp thứ hai, bạn sẽ kết thúc gửi dữ liệu người dùng theo cách riêng mà có thể tăng chi phí tích hợp và bảo trì theo thời gian. Trong cả hai trường hợp, bạn có thể xác thực ứng dụng front-end cho back-end bằng cách sử dụng một số loại thông tin xác thực khác, ví dụ: chứng chỉ được sử dụng ở cấp độ truyền tải và do đó tạo thành hệ thống con đáng tin cậy giữa chúng.

Một điều mà tôi sẽ đề nghị bạn xem xét thay vì là OAuth 2. Từ this blog post, có vẻ như với tôi rằng ACS hỗ trợ nó (mặc dù tôi không có bất kỳ kinh nghiệm tay đầu tiên w/nó). Điều thực sự tuyệt vời về OAuth 2 là nó làm cho phái đoàn tham gia, và KHÔNG ở đâu phức tạp như ActAs trong WS-Trust. Kết quả thực là giống nhau, nghĩa là dịch vụ back-end sẽ có thông tin về dịch vụ gọi điện và người dùng cuối, nhưng số lượng nỗ lực để thiết lập nó không thể so sánh được. Mã thông báo sẽ vẫn là mã thông báo mang nhưng bạn có thể giảm thiểu mức độ này bằng cách sử dụng SSL. Ngoài SSL, bạn có thể đặt một số biện pháp bổ sung tại chỗ, nhưng tốt nhất, IMO, sẽ là nếu Microsoft thực hiện điều gì đó trong ACS như Google đã thực hiện w/Thẻ truy cập của họ cho tài khoản dịch vụ sử dụng các khóa không đối xứng được xích tới PKI. (BTW, cho tất cả những gì tôi biết, Microsoft có thể đã làm một cái gì đó như thế; nếu có, bạn đã đặt.)

Dù sao thì, HTH!

+0

Câu trả lời xuất sắc, cảm ơn rất nhiều! Sẽ có một cái nhìn tại OAuth 2, sau đó, để xem tôi có thể tăng đột biến và chạy không. Tôi đoán rất dễ bị quyến rũ bởi sự hỗ trợ công cụ cho ActAs trong Windows Identity Foundation và WCF, nó làm cho nó trông rất đơn giản (và nó * là * đơn giản miễn là bạn đang sử dụng .NET + WCF và không phải peek dưới mui xe của sự vật). Có thể có vấn đề liên quan đến tính di động mặc dù. Xuống hố thỏ tôi đi ... –