SSO: Как получить массив групп в плагине SAML от redmine ominiauth от SAML-респона?

Реализация единого входа для Redmine: Idp- OpenAM, SP-redmine (плагин Ominiauth SAML)

Я хочу получить список групп, которые назначены пользователю в плагине redmine_ominiauth_saml, но я могу получить только одну группу, которая является первой по ответу SAML в утверждении групп.

Так есть ли другая конфигурация для атрибута массива:

Отображение атрибутов для SP на OpenAM:

  • группы = isMemberOf
  • last_name = зп
  • имя пользователя = почта
  • first_name= GivenName
  • адрес электронной почты =

Сопоставление атрибутов в Redmine: "/opt/redmine/config/initializers/saml_3.0.rb"

:attribute_mapping              => {
    # How will we map attributes from SSO to redmine attribute
      :login      => 'extra.raw_info.username',
      :firstname  => 'extra.raw_info.first_name',
      :lastname   => 'extra.raw_info.last_name',
      :mail       => 'extra.raw_info.email',
      :isMemberOf => 'extra.raw_info.groups'
    }

Ответ SAML содержит группы атрибутов в массиве следующим образом:

<saml:AttributeStatement>
                        <saml:Attribute Name="first_name">
                                <saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema"
                                                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                                     xsi:type="xs:string"
                                                     >umesh</saml:AttributeValue>
                        </saml:Attribute>
                        <saml:Attribute Name="username">
                                <saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema"
                                                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                                     xsi:type="xs:string"
                                                     >ubr@abc.com</saml:AttributeValue>
                        </saml:Attribute>
                        <saml:Attribute Name="email">
                                <saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema"
                                                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                                     xsi:type="xs:string"
                                                     >ubr@abc.com</saml:AttributeValue>
                        </saml:Attribute>
                        <saml:Attribute Name="last_name">
                                <saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema"
                                                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                                     xsi:type="xs:string"
                                                     >rajani</saml:AttributeValue>
                        </saml:Attribute>
                        <saml:Attribute Name="groups">
                                <saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema"
                                                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                                     xsi:type="xs:string"
                                                     >cn=ABC,ou=groups,dc=abc,dc=opendj,dc=com</saml:AttributeValue>
                                <saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema"
                                                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                                     xsi:type="xs:string"
                                                     >cn=XYZ,ou=groups,dc=abc,dc=opendj,dc=com</saml:AttributeValue>
                                <saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema"
                                                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                                     xsi:type="xs:string"
                                                     >cn=YZQ,ou=groups,dc=abc,dc=opendj,dc=com</saml:AttributeValue>
                        </saml:Attribute>
                </saml:AttributeStatement>

Я знал, что этот код в плагине SAML дает мне одну группу (код в ruby): /opt/redmine/plugins/redmine_omniauth_saml/lib/redmine_omniauth_saml.rb

def user_attributes_from_saml(omniauth)

         HashWithIndifferentAccess.new.tap do |h|
          required_attribute_mapping.each do |symbol|
            key = configured_saml[:attribute_mapping][symbol]
              h[symbol] = key.split('.')                # Get an array with nested keys: name.first will return [name, first]
              .map {|x| [:[], x]}                     # Create pair elements being :[] symbol and the key
              .inject(omniauth) do |hash, params|     # For each key, apply method :[] with key as parameter
                hash.send(*params)
              end
             **print "key:value "+key+":" +h[symbol]**  # gives key value pair, first_name, group 'ABC' only leaves other group
          end
        end
      end

1 ответ

Решение

На самом деле плагин ruby-saml является повторным запуском по умолчанию как атрибуты как одно значение.

Нам нужно установить значение multi в плагине ruby-saml.

Плагин ruby-saml имеет файл attribute.rb.

Обновите значение @@single_value_compatibility и установите значение "false".

Теперь вы получаете полный массив значений.

Надеюсь, что ваш вопрос будет решен.

Другие вопросы по тегам