Если кто столкнется с этой проблемой. Вам нужны два правила.
Правило № 1: sAMAccountName для временного
Это говорит ADFS искать в ActiveDirectory и возвращать все учетные записи, для которых совпадает имя участника-пользователя или адрес электронной почты. Затем правило сохраняет значение во временную переменную, которую мы будем использовать в следующем правиле.
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Свойства["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. contoso\adfs_service_account
это важно. Это необходимо ADFS для автоматического обнаружения контроллера домена. Используйте ЛЮБУЮ учетную запись AD, если это реальная учетная запись.
Правило № 2: временное значение для WindowsAccountName
Приведенное выше правило возвращает только имя sAMAccountName, а не домен. В моем случае у меня был только один домен. Таким образом, я жестко закодировал его ниже.
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);