Tìm hiểu về ADFS Claims Rules

Hôm nay chúng ta sẽ tìm hiểu về ADFS Claims Rules trong mô hình triển khai Office 365 Hybrid.
Như các bạn đã biết, dịch vụ Office 365 trên môi trương Hydrid - tích hợp với hệ thống Active Directory, ADFS, ADFS Proxy có những đặc thù riêng.
Khi công ty có những yêu cầu riêng như:

1- Chỉ cho phép sử dụng webmail (OWA) trong mạng nội bộ công ty
2- Thành viên của một group nào đó không được sử dụng giao thức ActiveSync
3- Thành viên của một group nào đó bị cấm truy cập OWA từ mạng ngoài.
4- Sử dụng chứng thực forms-based cho tất cả users khi truy cập OWA

Chúng sẽ dùng đến các Claims Rules trên máy chủ ADFS để thực hiện các yêu cầu trên.

1- Chỉ cho phép sử dụng webmail (OWA) trong mạng nội bộ công ty

Đây là một yêu cầu phổ biến.  Công ty yêu cầu chặn OWA nhưng vẫn cho phép dùng điện thoại, Outlook client để sử dụng email.
Mobile/Outlook client sử dụng các giao thức như RPC + HTTPS, EWS, ActiveSync, Autodiscover để kết nối vào máy chủ email.
Tư duy lập trình thì các rule sẽ kiểu như vầy :

If {
    {
ClientApplication is RPC
    Or
    ClientApplication is EWS
}
    AND
    ClaimType is Active
    AND
    ClientIPAddress is not in <corporate ip address list>
}
THEN DENY THE CLAIM

Viết lại theo kiểu ADFS Claim Rule thì như vầy:


exists([Type == “http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-proxy“]) &&

exists([Type == “http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-endpoint-absolute-path“, Value == “/adfs/services/trust/2005/usernamemixed”]) &&

exists([Type == “http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-client-application“, Value == “Microsoft.Exchange.RPC|Microsoft.Exchange.WebServices”]) &&

NOT exists([Type == “http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-forwarded-client-ip“, Value =~ “<public NAT addresses>”])

=> issue(Type = “http://schemas.microsoft.com/authorization/claims/deny“, Value = “true”);


Dòng 1: là Truy cập từ bên ngoài đi qua ADFS proxy
Dòng 2: là Active ADFS claim
Dòng 3: ClientApplication là RPC hoặc WebServices. Sử dụng "|" để kiểm tra các giá trị khác nhau
Dòng 4: Truy cập này không phải từ IP ranges quy định. Các dải IP hoặc một IP độc lập nào đó được viết theo định dạng "regular expression".

Nếu lớp ip của công ty bạn là 192.168.1.1~254 thì dòng trên sẽ là:

NOT exists([Type == “http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-forwarded-client-ip“, Value =~ “\b192\.168\.1\.([1-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-4]))\b”])
Dòng 5: Chặn truy cập nếu thỏa các điều kiện trên

2- Thành viên của một group nào đó không được sử dụng giao thức ActiveSync



Với yêu cầu này thì trước hết chúng ta cần tạo Security Group, sau đó lấy thông tin SID của group.

Rule sẽ như sau:
exists([Type == “http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-proxy”]) &&

exists([Type == “http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid”, Value =~ “Group SID value of allowed AD group”]) &&

exists([Type == “http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-client-application, Value == “Microsoft.Exchange.ActiveSync”])

=> issue(Type = “http://schemas.microsoft.com/authorization/claims/deny”, Value = “true”);

3- Thành viên của một group nào đó bị cấm truy cập OWA từ mạng ngoài.

Tương tự, chúng ta cần tạo Security Group và lấy thông tin SID của group.

Rule như sau:


exists([Type == “http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-proxy“])

&& exists([Type == “http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid“, Value =~ “S-1-5-21-299502267-1364589140-1177238915-114465”])

&& exists([Type == “http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-endpoint-absolute-path“, Value == “/adfs/ls/”])

=> issue(Type = “http://schemas.microsoft.com/authorization/claims/deny“, Value = “true”);

Dòng 3: nếu truy cập webmail (OWA)


Bài viết này tôi chỉ viết lại sơ lược về một số rule cơ bản trên ADFS như trên. Nếu bạn nào có thắc mắc hoặc nhu cầu tìm hiểu sâu hơn thì có thể trao đổi tại đây,
--------------------------------------------------------
Bài viết tham khảo: https://blogs.technet.microsoft.com/stevenha/2012/10/08/an-adfs-claims-rules-adventure/

Một số link hữu ích:
https://technet.microsoft.com/en-us/library/hh526961(v=ws.10).aspx - các rule chuẩn từ Microsoft.
http://www.analyticsmarket.com/freetools/ipregex - dùng để tính dải IP cần thiết
http://www.regextester.com/22  - Kiểm tra lại dải IP có đúng chưa




Viết nhận xét

Các bạn có thể viết lời nhận xét cho bài viết, nhưng cần tuân thủ một số quy tắc sau:

» Các nhận xét/bình luận phải nghiêm túc, không dung tục, không spam.
» Nội dung phải liên quan tới chủ đề bài viết.
» Viết bằng tiếng việt có dấu hoặc tiếng Anh. Nội dung viết không dấu sẽ bị xóa.
» Hãy để lại tên của bạn khi nhận xét/bình luận, để tôi có thể dễ dàng trả lời bạn khi cần.