Tôi đã định cấu hình Sự tin cậy của nhà cung cấp xác nhận quyền sở hữu trong ADFS và tôi chỉ Emailtham gia NameID. Tôi không thể thực hiện thay đổi đối với Sự tin cậy của nhà cung cấp khi xác nhận quyền sở hữu của bên thứ ba, vì vậy tôi phải WindowsAccountNamesử dụng Địa chỉ email mà tôi đã nhận được trong NameID từ IDP của bên thứ ba và chuyển tiếp nó đến Outlook Web Access (tại chỗ).

Tôi nhận thấy rằng khi tôi sử dụng Quy tắc xác nhận quyền sở hữu sau, đăng nhập sẽ hoạt động, nhưng chỉ khi UPN và địa chỉ email của người dùng khớp. Nếu có sự khác biệt giữa chúng (ví dụ: sAMAccountName = jdoe; [email protected] ; Email = Jonathan.Doe @ contoso.com), giá trị được chuyển tiếp đến Exchange sẽ gây ra lỗi.

c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] == "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"]
 => issue(Type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer = "AD AUTHORITY", OriginalIssuer = c.OriginalIssuer, Value = regexreplace(c.Value, "(?<user>[^\@]+)\@(.+)", "contoso\${user}"), ValueType = c.ValueType);

Làm cách nào để tôi có thể tra cứu người dùng qua địa chỉ email của họ và gửi lại WindowsAccountNamedomain\usernameđịnh dạng của họ?

answer

Nếu có ai gặp phải vấn đề này. Bạn cần hai quy tắc.

Quy tắc # 1: sAMAccountName để tạm thời Điều này yêu cầu ADFS tìm trong ActiveDirectory và trả về bất kỳ tài khoản nào có địa chỉ email hoặc UPN khớp với nhau. Sau đó, quy tắc lưu trữ giá trị vào một biến tạm thời mà chúng tôi sẽ sử dụng trong quy tắc tiếp theo.

c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] == "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"]
 => issue(store = "Active Directory", types = ("claims:temp/attribute1"), query = "(&(objectCategory=person)(objectClass=user)(|(userPrincipalName={0})(mail={0})));sAMAccountName;contoso\adfs_service_account", param = c.Value);

NB. Điều contoso\adfs_service_accountquan trọng. ADFS cần điều này để tự động phát hiện Bộ điều khiển miền. Sử dụng BẤT KỲ tài khoản QUẢNG CÁO nào, miễn là đó là tài khoản thật.

Quy tắc # 2: tạm thời thành WindowsAccountName Quy tắc trên chỉ trả về sAMAccountName, không trả về miền. Trong trường hợp của tôi, tôi chỉ có một miền. Như vậy, tôi đã mã hóa nó dưới đây.

c:[Type == "claims:temp/attribute1"] => issue(Type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer = "AD AUTHORITY", OriginalIssuer = "https://contoso.verify.ibm.com/saml/sps/saml20ip/saml20", Value = "contoso\" + c.Value);