info中的omniauth-saml nil值

时间:2016-01-21 21:14:03

标签: ruby-on-rails devise omniauth simplesamlphp

我按照https://github.com/PracticallyGreen/omniauth-saml和omniauth Facebook示例https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

的说明使用devise和omniauth-saml

我有一个simplesamlphp服务器运行,使用omniauth提供的元数据,一切似乎都正常连接,但simplesaml服务器的响应有email,first_name,last_name和name的nil值。奇怪的是它返回了电子邮件和名称值,只是没有在响应的有用部分(见下文 - super@man.com是电子邮件,Clark Kent是名字)

奇怪的是,我使用omniauth-saml和devise-saml-authenticatable gems得到这些nil值,但我认为我的simplesamlphp服务器配置正确。

omniauth的回复如下:

#<OmniAuth::AuthHash credentials=#<OmniAuth::AuthHash> extra=#<OmniAuth::AuthHash raw_info=#<OneLogin::RubySaml::Attributes:0x007fc695850148 @attributes={"urn:oid:0.9.2342.19200300.100.1.1"=>["super@man.com"], "urn:oid:2.16.840.1.113730.3.1.241"=>["Clark Kent"], "fingerprint"=>"FINGERPRINT REMOVED"}>> info=#<OmniAuth::AuthHash::InfoHash email=nil first_name=nil last_name=nil name=nil> provider="saml" uid="_ca76f49ccb6ccce7827111ae1ff0563f534f0a4d1a">

simplesamlphp配置如下所示:

$metadata['http://localhost:3000/saml/users/auth/saml/metadata'] = array( 'AssertionConsumerService' => 'http://localhost:3000/saml/users/auth/saml/callback', 'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:email', 'simplesaml.nameidattribute' => 'email', );

我确信数据库中的用户有很好的价值,当我在IDP上测试身份验证时,一切都按预期工作。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。问题是我试图使用没有使用ldap属性名称的值。

我按如下方式更改了我的sp元数据(修改模型后使用first_name和last_name而不仅仅是名称)

$metadata['http://localhost:3000/saml/users/auth/saml/metadata'] = array(
'AssertionConsumerService' => 'http://localhost:3000/saml/users/auth/saml/callback',
'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:email',
'authproc' => array(
95 => array(
    'class' => 'core:AttributeMap',
    'givenName' => 'first_name',
    'sn' => 'last_name',
    'mail' => 'email',
),
96 => array(
    'class' => 'core:AttributeLimit',
    'email', 'first_name', 'last_name'
),
),
'simplesaml.nameidattribute' => 'email',
);