2016-11-28 88 views
0

我使用Opensaml以产生用于天蓝为什么这不是一个有效的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一个SAML2认证请求用org.opensaml.xml.io.Marshaller和java.util.zip.DeflaterOutputStream.DeflaterOutputStream编码以Base64和我验证它通过使用一些在线saml解码器for correctnes。

我从蔚蓝然而得到的错误是:

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

任何人都可以帮助吗?

+0

提供的XML摘录甚至不是XML文档,您能否提供整个XML? –

+0

其实这是整个XML ....不知何故,Stackoverflow虽然没有显示最后一个结束标记。但这是完整的XML请求。 – Gobliins

回答

1

在元件“AuthnRequest”可以定义属性“ID”为“0”。这不是原子类型'xs:ID'的有效值。

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

的XS:ID简单类型被用来声明SAML标识符 断言,请求和响应。值声明为类型 的xs:在本说明书ID必须在 除了那些由XS的定义施加满足下列性质:ID类型本身:

  • 指派的标识符必须确保任何一方该方或任何其他方将 意外地将相同的标识符分配给不同的数据对象的概率可以忽略不计。
  • 凡数据对象声明,它有一个特定的识别码, 必须正好一个这样的声明。

通过其 SAML系统实体确保标识符是唯一的则留给 执行情况的机制。在这种随机或伪随机 技术采用的情况下,两个概率随机选择 标识符是相同的必须小于或等于2-128和 应小于或等于2-160。

你应该利用现有的方式来生成ID之一。

+0

Thx男子。我查了很多东西,但没有想到这一点。 – Gobliins