我正在使用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.
任何人都可以提供帮助吗?
答案 0 :(得分:1)
在元素&#39; AuthnRequest&#39;你定义属性&#39; ID&#39;作为&#39; 0&#39;。这不是原子类型的有效值&#39; xs:ID&#39;。
我引用了Oasis文档的技术规则:
xs:ID简单类型用于声明SAML标识符 断言,请求和响应。声明为值的值 xs:本规范中的ID必须满足以下属性 除了xs:ID类型本身的定义强加的那些:
- 分配标识符的任何一方必须确保存在 该方或任何其他方的概率可以忽略不计 意外地将相同的标识符分配给不同的数据对象。
- 如果数据对象声明它具有特定标识符, 必须有一个这样的声明。
a的机制 SAML系统实体确保标识符是唯一的 实施。在随机或伪随机的情况下 采用的技术,两个随机选择的概率 标识符相同必须小于或等于2-128和 应该小于或等于2-160。
您应该使用现有方法之一来生成ID。