Атрибуты#

Внешний валидатор атрибута#

Если возможностей, предоставляемых правилами преобразования входных значений с помощью регулярных выражений недостаточно для реализации требуемой бизнес-логики проверки допустимости значения атрибута, то для атрибута можно запрограммировать и настроить использование внешнего валидатора.

Для этого нужно создать программу с внешним валидатором и собрать ее в JAR-файл.

Созданный JAR-файл нужно скопировать на серверы с приложениями Blitz Identity Provider. Адрес размещения JAR-файлов прописать в Java-опцию extensionsDir.

Пример:

export JAVA_OPTS="${JAVA_OPTS} -DextensionsDir=/usr/share/identityblitz/extensions"

В блоке настроек атрибутов blitz.prod.local.idp.id-attrs.attrsMeta в блок описания атрибута, для которого нужно включить проверку через внешний валидатор, необходимо добавить в блоке source блок validators:

  • в настройке className прописать адрес Java-класса, реализующего имплементацию интерфейса AttributeValidator из Blitz JDK;

  • в блоке conf прописать настройки, передающиеся в валидатор.

"id-attrs" : {
    "attrsMeta" : [
        {
            {
                "class" : "verified-mobile",
                "format" : "string",
                "name" : "phone_number",
                "realmed" : false,
                "required" : false,
                "searchable" : true,
                "source" : {
                    "validators" : [
                        {
                            "className" : "validator.MobileValidator",
                            "conf" : {
                                "conf1" : "value1"
                            }
                        }
                    ],
                    "type" : "idStore"
                },
                "unique" : false
            },
            …
        }
    ]
}

Транслятор атрибута#

С атрибутом можно ассоциировать транслятор, описывающий правила преобразования атрибута при чтении из LDAP-каталога и при записи в LDAP-каталог. Для этого необходимо:

  1. В блоке настроек хранилища атрибута найти раздел настроек соответствия атрибутов blitz.prod.local.idp.id-stores.list.mappingRules.

  2. В данном разделе найти раздел описания атрибута, для которого нужно включить транслятор.

  3. В этот раздел добавить блок translator с настройкой className, в которой указать имя Java-класса, реализующего алгоритм трансляции.

"id-stores" : {
    "list" : [
        {
            …
            "mappingRules" : [
                …
                {
                    "name" : "attribute name in Blitz IDP",
                    "storeAttr" : "attribute name in LDAP",
                    "translator" : {
                        "className" :
                            "className"
                    }
                }
            ],
        },
        …
    ]
}

При использовании самостоятельно разработанного транслятора необходимо:

  1. Создать программу с внешним транслятором и собрать ее в JAR-файл.

    Важно

    Java-класс алгоритма трансляции должен реализовывать имплементацию интерфейса LdapAttributeTranslator из Blitz JDK.

  2. Созданный JAR-файл скопировать на серверы с приложениями Blitz Identity Provider.

  3. Адрес размещения JAR-файлов прописать в Java-опцию extensionsDir.

    export JAVA_OPTS="${JAVA_OPTS} -DextensionsDir=/usr/share/identityblitz/extensions"
    

Для некоторых задач Blitz Identity Provider предоставляет встроенные Java-классы:

  • транслятор для атрибута objectGUID из Active Directory, позволяющий представить этот атрибут не в байтовом виде, а в форме строки GUID. Имя встроенного Java-класса com.identityblitz.idp.store.ldap.core.translator.ObjectGUIDTranslator.

    "id-stores" : {
        "list" : [
            {
                …
                "mappingRules" : [
                    …
                    {
                        "name" : "objectGUID",
                        "storeAttr" : "objectGUID",
                        "translator" : {
                            "className" :
                                "com.identityblitz.idp.store.ldap.core.translator.ObjectGUIDTranslator"
                        }
                    }
                ],
            },
            …
        ]
    }
    
  • трансляторы для перевода значения атрибута в нижний регистр, в верхний регистр или в режим initcap (то есть первый символ в верхний регистр, а остальные — в нижний).

    Перечень встроенных Java-классов:

    com.identityblitz.idp.store.ldap.core.translator.LowerCaseTranslator
    com.identityblitz.idp.store.ldap.core.translator.UpperCaseTranslator
    com.identityblitz.idp.store.ldap.core.translator.InitCapTranslator
    
    Пример перевода атрибута email в нижний регистр#
    "id-stores" : {
        "list" : [
            {
                …
                "mappingRules" : [
                    …
                    {
                       "name" : "email",
                       "storeAttr" : "email",
                       "translator" : {
                            "className" : "com.identityblitz.idp.store.ldap.core.translator.LowerCaseTranslator"
                       }
                    }
                ],
            },
            …
        ]
    }
    
    Пример перевода атрибута fullname в верхний регистр#
    "id-stores" : {
        "list" : [
            {
                …
                "mappingRules" : [
                    …
                    {
                       "name" : "fullname",
                       "storeAttr" : "fullName",
                       "translator" : {
                            "className" : "com.identityblitz.idp.store.ldap.core.translator.UpperCaseTranslator"
                       }
                    }
                ],
            },
            …
        ]
    }
    
    Пример перевода атрибута name в режим initcap#
    "id-stores" : {
        "list" : [
            {
                …
                "mappingRules" : [
                    …
                    {
                       "name" : "name",
                       "storeAttr" : "givenName",
                       "translator" : {
                            "className" : "com.identityblitz.idp.store.ldap.core.translator.InitCapTranslator"
                       }
                    }
                ],
            },
            …
        ]
    }
    
  • транслятор для атрибута objectSID для его конвертации в строковый вид. Имя встроенного Java-класса com.identityblitz.idp.store.ldap.core.translator.ObjectSIDTranslator. Для конвертированного атрибута возможен поиск, при этом операция LIKE не поддерживается. Также нельзя его изменять и задавать при создании.

    Пример настройки:

    "id-stores" : {
        "list" : [
            {
                …
                "mappingRules" : [
                    …
                    {
                        "name": "objectSID",
                        "storeAttr": "objectSID",
                        "translator": {
                            "className": "com.identityblitz.idp.store.ldap.core.translator.ObjectSIDTranslator"
                        }
                    }
                ],
            },
            …
        ]
    }