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".
Теперь вы получаете полный массив значений.
Надеюсь, что ваш вопрос будет решен.