【问题标题】:Can't handle HTTP multiple attribute values in Perl无法在 Perl 中处理 HTTP 多个属性值
【发布时间】: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_0MELLON_Profile_1 属性时,分配给它的变量似乎是空的。您对这里可能出现的问题有任何想法吗?

欢迎任何帮助!非常感谢大家

PS:我无法控制身份提供者,因此无法编辑发送的属性

【问题讨论】:

  • 也许您需要使用环境变量中的值而不是环境键的名称来初始化对象的属性。
  • 感谢您的回答。我已经试过了,但没有区别
  • 你确认环境变量确实设置了吗?
  • 此外,使用环境变量中的值实际初始化属性更有意义。否则你没有对象中的值。
  • 是的,我验证了环境变量已设置并且其他环境变量工作正常。

标签: apache perl saml otrs mellon


【解决方案1】:

我没有设法让它工作,但我找到了一个解决方法来阻止没有Profile 属性值的用户登录应用程序:

MellonCond Profile company.autre.mcf.sp(dev)

根据documentation

您还可以利用 SAML 属性来控制 Mellon 身份验证是否成功(一种授权形式)。因此,即使 IdP 可能已成功验证用户身份,您也可以通过 MellonCond 指令应用额外的约束。基本思想是每个 MellonCond 指令指定一个条件,该条件的计算结果为 True 或 False。

【讨论】:

    猜你喜欢
    • 2014-07-17
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多