2016-06-17 39 views
0

Implementierung von SSO für redmine: Idp- OpenAM, SP-redmine (Ominiauth SAML-Plugin)SSO: Wie bekomme ich Gruppen von Gruppen in Redmine Ominiauth SAML Plugin aus der SAML respone?

I Liste der Gruppen erhalten möchten, die in redmine_ominiauth_saml Plugin Benutzer zugeordnet sind, aber ich kann nur einzelne Gruppe erhalten, die zuerst auf SAML Antwort in Gruppenbehauptung.

So gibt es eine andere Konfiguration für die Array-Attribut:

Mapping von Attributen für SP auf OpenAM:

  • Gruppen = IsMemberOf
  • last_name = sn
  • username = mail
  • first_name = givenName
  • email = mail

Mapping von Attributen auf 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 Antwort enthält Attributgruppen in Array wie folgt:

<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" 
                >[email protected]</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" 
                >[email protected]</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> 

ich wusste, dass dieser Code in SAML-Plugin mir einzelne Gruppe gibt (Code in 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 

Antwort

1

Eigentlich Ruby-SAML-Plugin ist standardmäßig Retrun als Attribute als Einzelwert.

Wir müssen als für multi-Wert in Ruby-SAML-Plugin einstellen.

Ruby-SAML-Plugin haben Attribute.RB-Datei.

Aktualisieren Sie den Wert von @@ single_value_compatibility gesetzt und als „false“

Jetzt werden Sie die volle Palette von Wert zu bekommen.

Ich hoffe, dass das Problem gelöst wird.

+0

Vielen Dank, es funktioniert wirklich. !! –