【问题标题】:Why is this not a valid saml2 request?为什么这不是一个有效的 saml2 请求?
【发布时间】:2016-11-28 09:55:55
【问题描述】:

我正在使用 Opensaml 为 azure 生成 saml2 身份验证请求

<?xml version="1.0" encoding="UTF-8"?>
<samlp:AuthnRequest AssertionConsumerServiceURL="https://myserver.de/_saml/validate/azure"
ForceAuthn="false" ID="0" IsPassive="false" IssueInstant="2016-11-28T09:46:43.215Z"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
Version="2.0" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<samlp:Issuer xmlns:samlp="urn:oasis:names:tc:SAML:2.0:assertion">issuerid</samlp:Issuer>
<saml2p:NameIDPolicy AllowCreate="true"
    Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
    SPNameQualifier="Isser" xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" />
<saml2p:RequestedAuthnContext Comparison="exact"
    xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol">
    <saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef>
</saml2p:RequestedAuthnContext>
</samlp:AuthnRequest>

XML 使用 org.opensaml.xml.io.Marshaller 和 java.util.zip.DeflaterOutputStream.DeflaterOutputStream 编码为 Base64,我使用一些在线 saml 解码器对其进行了验证。

我从 azure 得到的错误是:

AADSTS75005: The request is not a valid Saml2 protocol message.

有人可以帮忙吗?

【问题讨论】:

  • 提供的 XML 摘录甚至不是 XML 文档,能否请您提供整个 XML?
  • 实际上这是整个 XML.... 不知何故 Stackoverflow 没有显示最后一个结束标记。但这就是 XML 中的完整请求。

标签: java azure saml-2.0 opensaml


【解决方案1】:

在元素“AuthnRequest”中,您将属性“ID”定义为“0”。这不是原子类型“xs:ID”的有效值。

我引用绿洲文档的技术规则:

xs:ID 简单类型用于声明 SAML 标识符 断言、请求和响应。声明为类型的值 本规范中的 xs:ID 必须满足以下属性 除了 xs:ID 类型本身的定义强加的那些:

  • 分配标识符的任何一方必须确保存在 该方或任何其他方将 意外地将相同的标识符分配给不同的数据对象。
  • 如果数据对象声明它具有特定标识符, 必须有一个这样的声明。

一种机制 SAML 系统实体确保标识符是唯一的 实施。在随机或伪随机的情况下 技术被采用,两个随机选择的概率 相同的标识符必须小于或等于 2-128 并且 应小于或等于 2-160。

您应该使用现有的一种方式来生成 ID。

【讨论】:

  • 谢谢人。我检查了很多东西,但没有想到。
猜你喜欢
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多