2016-11-28 93 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