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
và _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?
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 đồ. –