【发布时间】:2022-01-11 11:07:20
【问题描述】:
我正面临一个非常奇怪的问题。我将 SAML 身份验证与 OTRS 接口,这是一个用 Perl 编写的 ITSM,身份提供者发送的属性如下:
LoginName : dev-znuny02
mail : test2@company.dev
Profile : company.autre.idp.v2()
Profile : company.autre.mcf.sp(dev)
givenName : MyName
sn : Test2
我使用一个名为 Mod_Auth_Mellon 的模块来处理这些问题,正如您所见,Profile 属性是多值的。简而言之,我使用以下 sn-p 检索所有这些值:
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {};
bless( $Self, $Type );
$Self->{ConfigObject} = $Kernel::OM->Get('Kernel::Config');
$Self->{UserObject} = Kernel::System::User->new( %{$Self} );
# Handle header's attributes
$Self->{loginName} = 'MELLON_LoginName';
$Self->{eMail} = 'MELLON_mail';
$Self->{Profile_0} = 'MELLON_Profile_0';
$Self->{Profile_1} = 'MELLON_Profile_1';
$Self->{gName} = 'MELLON_givenName';
$Self->{sName} = 'MELLON_sn';
return $Self;
}
sub Auth {
my ( $Self, %Param ) = @_;
# get params
my $lname = $ENV{$Self->{loginName}};
my $email = $ENV{$Self->{eMail}};
my $profile0 = $ENV{$Self->{Profile_0}};
my $profile1 = $ENV{$Self->{Profile_1}};
my $gname = $ENV{$Self->{gName}};
my $sname = $ENV{$Self->{sName}};
...
}
我可以处理除属性Profile 之外的所有属性值。当我查看documentation 时,他们说:
如果一个属性有多个值,那么它们将被存储为
MELLON_<name>_0, MELLON_<name>_1, MELLON_<name>_2
可以肯定的是,我激活了 Mellon 模块的诊断,并且确实收到了正确的信息:
...
MELLON_LoginName : dev_znuny02
MELLON_LoginName_0 : dev_znuny02
MELLON_mail : test2@company.dev
MELLON_mail_0 : test2@company.dev
MELLON_Profile : company.autre.idp.v2()
MELLON_Profile_0 : company.autre.idp.v2()
MELLON_Profile_1 : company.autre.mcf.sp(dev)
...
当我尝试在 Perl 脚本中操作 MELLON_Profile_0 或 MELLON_Profile_1 属性时,分配给它的变量似乎是空的。您对这里可能出现的问题有任何想法吗?
欢迎任何帮助!非常感谢大家
PS:我无法控制身份提供者,因此无法编辑发送的属性
【问题讨论】:
-
也许您需要使用环境变量中的值而不是环境键的名称来初始化对象的属性。
-
感谢您的回答。我已经试过了,但没有区别
-
你确认环境变量确实设置了吗?
-
此外,使用环境变量中的值实际初始化属性更有意义。否则你没有对象中的值。
-
是的,我验证了环境变量已设置并且其他环境变量工作正常。
标签: apache perl saml otrs mellon