perl:变量返回哈希值,而不是字符串

问题描述 投票:1回答:1

我正在对与Perl模块AuthCASSaml有关的问题进行故障排除。我们有一款软件,我们想使用我们的CAS服务器进行身份验证。身份验证正常。但是,当AuthCASSaml处理返回的输出时,它将结束returninf HASH引用,而不是CAS服务器返回的ldap属性的实际值。我已将其精确定位到AuthCASSaml.pm代码的这一部分:

my $user = $responseBase->{'saml1:Assertion'}{'saml1:AuthenticationStatement'}{'saml1:Subject'}{'saml1:NameIdentifier'};
my %casAttrs;
my $attrs = $responseBase->{'saml1:Assertion'}{'saml1:AttributeStatement'}{'saml1:Attribute'};
if($attrs) {
for(my $i=0;$i<@$attrs;$i++) {
my $attr = $$attrs[$i];
my $name = $attr->{'AttributeName'};
my $value = $attr->{'saml1:AttributeValue'};
$casAttrs{$name} = $value;
}
}

“ AttributeName”返回预期的结果。问题出在“ AttributeValue”上。该代码似乎期望使用字符串,但是从CAS服务器返回的“ AttributeValue”的xml代码不仅仅是一个简单的字符串。

<saml1:Attribute AttributeName="UDC_IDENTIFIER" AttributeNamespace="http://www.ja-sig.org/products/cas/">
      <saml1:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">useriden</saml1:AttributeValue>
</saml1:Attribute>

返回的结果是“属性:uid => HASH(0x331ecb0),UDC_IDENTIFIER => HASH(0x331ee90)”。

我还要注意,我们正在运行的所有代码均由供应商提供。我不是perl程序员。我只是想让所有的东西在一起玩的很好。这是一个很长的故事,但是我只能说在这种情况下供应商没有帮助。

我可以在cgi脚本中提供代码进行测试,但是主要软件代码也遇到此问题,这就是为什么我非常确定AuthCASSaml.pm是尝试解决此问题的地方。

非常感谢您的帮助。

xml perl cas
1个回答
0
投票

从我的answerWhy is XML::Simple Discouraged?的相关代码段:

这意味着您必须执行各种检查才能查看实际得到的内容。但是,这样做的复杂性促使开发人员做出非常错误的假设。

看来这里正在发生。也就是说,可以使用以下命令访问所需的数据:

 my $av_node = $attr->{'saml1:AttributeValue'};
 $casAttrs{$name} = ref($av_node) ? $av_node->{content} : $av_node;

注意,仍然做出了一些上述假设。

© www.soinside.com 2019 - 2024. All rights reserved.