我面临着一个很奇怪的问题。我用OTRS接口SAML身份验证,这是一个用Perl编写的ITSM,身份提供者发送属性如下:
LoginName : dev-znuny02
mail : test2@company.dev
Profile : company.autre.idp.v2()
Profile : company.autre.mcf.sp(dev)
givenName : MyName
sn : Test2我使用一个名为https://jdennis.fedorapeople.org/doc/mellon-user-guide/mellon_user_guide.html的模块来处理这些问题,如您所见,属性Profile是多值的。简而言之,我使用以下代码片段检索所有这些值:
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之外,我可以处理属性的所有值。当我看文档的时候,他们说:
如果一个属性有多个值,那么它们将被存储为
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 :我无法控制身份提供者,所以我无法编辑发送的属性
发布于 2022-01-16 17:34:17
我没有设法使其工作,但我找到了一个解决办法,以防止没有Profile属性值的用户登录到应用程序中:
MellonCond Profile company.autre.mcf.sp(dev)根据文档:
您还可以使用SAML属性来控制Mellon身份验证是否成功(一种授权形式)。因此,即使IdP可能已经成功地对用户进行了身份验证,您也可以通过MellonCond指令应用其他约束。基本思想是,每个MellonCond指令都指定一个条件,该条件的计算结果为True或False。
https://stackoverflow.com/questions/70665749
复制相似问题