2015-04-21 22 views
10

nền

Chúng tôi đang phát triển một sản phẩm SaaS nhiều người thuê trong Azure trong đó có một AngularJS front-end và Web API back-end. Chúng tôi sử dụng Azure AD để xác thực và đã kết nối nó với ADAL JS (sử dụng trợ cấp ngầm OAuth2). Là một ứng dụng nhiều người thuê, chúng tôi cho phép khách hàng xác thực với Azure AD của riêng họ (có thể hoặc không được kết nối với AD tại chỗ).Nhóm tuyên bố với Azure AD và OAuth2 cấp tiềm ẩn trong ADAL JS

Cho đến nay, tất cả đều hoạt động tốt. ADAL JS đưa người dùng đến trang đăng nhập Azure và khi người dùng đã xác thực, mã thông báo OAuth2 được cấp. Mã thông báo JWT này sau đó được gửi đi với tất cả các cuộc gọi API dưới dạng mã thông báo mang trong đó chúng tôi có quy trình chuyển đổi xác nhận quyền sở hữu của riêng mình để ánh xạ các xác nhận quyền sở hữu đến từ Azure cho các yêu cầu ứng dụng của chúng tôi.

Thay vì chỉ định người dùng cá nhân trong quy trình chuyển đổi xác nhận quyền sở hữu, chúng tôi cố gắng thực hiện theo nhóm quảng cáo. Điều này cho phép khách hàng của chúng tôi có các nhóm bảo mật trong AD của họ và sau đó ứng dụng của chúng tôi sẽ sử dụng nó để lập bản đồ cho các yêu cầu ứng dụng chính xác.

Vấn đề

JWT thẻ chúng tôi nhận được không chứa một tài sản groups, mặc dù đã thiết lập groupMembershipClaims-SecurityGroup trong biểu hiện ứng dụng AAD. Tôi đã kể từ khi đọc trong this tweet from Vittorio rằng

Việc cấp ngầm sẽ KHÔNG gửi những tuyên bố, vì nó trả về token trong chuỗi truy vấn - nó dễ dàng để thổi qua tối đa chiều dài

Sau khi điều tra thêm, tôi cũng được tìm thấy this StackOverflow answer from Vittorio có nội dung là

Tôi đã xác minh và trong trường hợp cấp phép tiềm ẩn, bạn sẽ luôn nhận nhóm thông qua yêu cầu bồi thường quá mức. Vui lòng tham khảo https://github.com/AzureADSamples/WebApp-GroupClaims-DotNet/tree/master/WebApp-GroupClaims-DotNet - nó sẽ cho bạn thấy làm thế nào để xử lý yêu cầu bồi thường quá cảnh để lấy các nhóm.

Tôi đã xem mã thông báo JWT và nó không bao gồm bất kỳ xác nhận quyền sở hữu quá mức nào (được xác định bởi _claim_names_claim_sources). Tôi chắc chắn là một thành viên của hai nhóm trong Azure AD của tôi.

Tôi hiện cũng có hai câu cảnh báo xung đột về việc liệu có thể lấy thông tin nhóm (dù trực tiếp hay gián tiếp) trong mã thông báo cấp phép ngầm.

Câu hỏi 1: Tôi có nên nhận yêu cầu bồi thường quá mức mà tôi có thể sử dụng để nhận thông tin nhóm không? Nếu vậy, tôi có cần phải làm bất cứ điều gì để đảm bảo rằng yêu cầu đó được gửi cho tôi không?

Graph API

Cho dù tôi có thể nhận được một yêu cầu dư thừa với một liên kết cho người sử dụng trong API đồ thị hay tôi phải tự thủ vào liên kết để có được nhóm của người dùng, tôi vẫn còn một chút không chắc chắn cách tôi xác thực với API biểu đồ.

Tôi cần liên hệ với API biểu đồ từ phía sau sau khi nhận được yêu cầu có mã thông báo mang (từ ADAL JS).

Câu hỏi 2: Tôi có thể gửi cùng một mã thông báo cho biểu đồ API để đọc thông tin thư mục của người dùng đó không?Hoặc tôi có cần phải xác thực trực tiếp từ ứng dụng của tôi cho đối tượng thuê API biểu đồ trong ngữ cảnh của ứng dụng hơn là người dùng không?

+0

Tôi chưa bao giờ quản lý được phía khách hàng làm việc này. Thay vào đó, tôi thực hiện một phía máy chủ cuộc gọi API Graph bằng cách sử dụng mã thông báo của người dùng và Thay mặt cho tài trợ. Sau đó tôi có thể nhận tư cách thành viên nhóm từ API biểu đồ. –

Trả lời

4

xin lỗi về sự nhầm lẫn ở đây. Tôi sẽ kiểm tra lại tuyên bố về tình trạng dư thừa, nhưng trong mọi trường hợp - vì lợi ích của việc bỏ chặn bạn một cách nhanh chóng, chúng ta hãy giả sử rằng bạn cần phải lấy các nhóm theo cách thủ công mà không cần sự trợ giúp của yêu cầu bồi thường. Bạn không thể sử dụng lại mã thông báo bạn gửi cho API Web của mình. Mã thông báo đó được đưa vào ứng dụng của bạn và bất kỳ người nhận nào khác sẽ (hoặc nên) từ chối nó. Tin tốt là luồng mà qua đó phụ trợ của bạn có thể yêu cầu một mã thông báo mới được hiển thị cho Biểu đồ dễ thực hiện. Xem https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNet - chi tiết trong trường hợp của bạn hơi khác một chút (API web của bạn có đối tượng == clientid trong ứng dụng của bạn) nhưng cấu trúc liên kết và mã/cuộc gọi có liên quan giống nhau. HTH! V.

+0

Cảm ơn vì điều đó. Tôi đã triển khai tra cứu API biểu đồ thủ công bằng cách sử dụng thay mặt cho mã thông báo. Nó hoạt động độc đáo khi người dùng và ứng dụng của tôi ở cùng AAD/người thuê. Tuy nhiên, khi tôi có người dùng và ứng dụng ở những người thuê riêng biệt, tôi nhận được _AADSTS50034: Để đăng nhập vào ứng dụng này, tài khoản phải được thêm vào thư mục xxxxx.onmicrosoft.com._ khi cố gắng lấy mã thông báo. –

+0

Người dùng có phải là khách trong đối tượng thuê mục tiêu không? Nếu không, đó là do thiết kế ... Và ứng dụng cần quyền cấp ứng dụng đối với biểu đồ thay vì được ủy quyền – vibronet

+0

Không hoàn toàn chắc chắn ý của bạn là gì. Người dùng (thuộc đối tượng thuê của khách hàng) đăng nhập vào ứng dụng của chúng tôi (trong đối tượng thuê của chúng tôi). Bạn có nói rằng tôi cần thêm người dùng của khách hàng vào người thuê nhà của chúng tôi không? Tôi nghĩ điểm của các ứng dụng nhiều người thuê nhà là chúng ta không phải đối phó với những người dùng như thế này? Tất cả những gì chúng tôi đang cố gắng làm là cho phép các phòng CNTT của khách hàng thêm người dùng của họ vào các nhóm trong AD như thường lệ và sau đó nhận các thành viên nhóm này trong ứng dụng của chúng tôi để chúng tôi có thể cấp quyền cho các nhóm chứ không phải trực tiếp đối phó với người dùng. Suy nghĩ của tôi đúng hay có cách nào tốt hơn để đạt được điều này? –

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