2014-02-17 84 views
1

我一直在試圖找到解決方案,我的問題是過去10天,我什麼也沒找到。 因此,我試圖限制SAML 2.0的身份驗證上下文XML模式定義。 XSD文檔可在http://docs.oasis-open.org/security/saml/v2.0/saml-schema-authn-context-types-2.0.xsd訪問。如何限制SAML 2.0驗證上下文的XSD

,我試圖限制的部分是一個涉及到XSD文件的這一部分:

<xs:complexType name="PasswordType"> 
    <xs:sequence> 
    <xs:element ref="Length" minOccurs="0"/> 
    <xs:element ref="Alphabet" minOccurs="0"/> 
    <xs:element ref="Generation" minOccurs="0"/> 
    <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
    <xs:attribute name="ExternalVerification" type="xs:anyURI" use="optional"/> 
</xs:complexType> 
<xs:element name="RestrictedPassword" type="RestrictedPasswordType"/> 
<xs:complexType name="RestrictedPasswordType"> 
    <xs:complexContent> 
    <xs:restriction base="PasswordType"> 
     <xs:sequence> 
     <xs:element name="Length" type="RestrictedLengthType" minOccurs="1"/> 
     <xs:element ref="Generation" minOccurs="0"/> 
     <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
     <xs:attribute name="ExternalVerification" type="xs:anyURI" use="optional"/> 
    </xs:restriction> 
    </xs:complexContent> 
</xs:complexType> 

好了,我不知道如何限制RestrictedPassword複雜類型。下面是我的XSD,它試圖限制原始的XSD文檔。

<?xml version="1.0" encoding="UTF-8"?> 

<xs:schema version="2.0" 
     targetNamespace="urn:m:SAML:2.0:ac:classes:K" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     xmlns="urn:m:SAML:2.0:ac:classes:K"   
     finalDefault="extension" 
     blockDefault="substitution"> 

<xs:redefine schemaLocation="http://docs.oasis-open.org/security/saml/v2.0/saml-schema-authn-context-types-2.0.xsd">  

    <xs:complexType name="RestrictedPasswordType"> 
     <xs:complexContent> 
      <xs:restriction base="RestrictedPasswordType"> 
       <xs:sequence> 
        <xs:element ref="Length" minOccurs="0"/> 
        <xs:element ref="Generation"/> 
        <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/> 
       </xs:sequence> 
       <xs:attribute name="ExternalVerification" type="xs:anyURI" use="optional"/> 
      </xs:restriction> 
     </xs:complexContent> 
    </xs:complexType> 

</xs:redefine>  
</xs:schema> 

當我試圖驗證此XSD在該工具http://www.utilities-online.info/xsdvalidation/#.UwJAzK69h31返回我一個錯誤,我不知道如何解決。這是錯誤:

Not valid. Error - Line 12, 51: org.xml.sax.SAXParseException; lineNumber: 12; columnNumber: 51; rcase-Recurse.2: There is not a complete functional mapping between the particles. Error - Line 12, 51: org.xml.sax.SAXParseException; lineNumber: 12; columnNumber: 51; derivation-ok-restriction.5.4.2: Error for type 'RestrictedPasswordType'. The particle of the type is not a valid restriction of the particle of the base. 

任何幫助是值得歡迎的。

謝謝!

多梅內克,馬龍

回答

0

新的受限制類型的所有實例也必須是有效的基本類型。但是,在您的模式中,可以定義RestrictedPasswordType,該屬性不具有Length屬性(minOccurs="0"),對於基本類型而言這將是非法的。使元素可選不是基類型的限制。

Generation刪除minOccurs='0'是可以的,因爲具有至少一個元素的限制。

此外,您的限制引用了Length元素,該元素與基本類型中定義的Length元素不同。根據基本模式,Length元素爲LengthType,基本類型中的Length元素爲RestrictedLengthType,這是LengthType的限制。

我相信,如果你在你的派生型改變<xs:element>聲明:

<xs:element name="Length" type="RestrictedLengthType" minOccurs="1"/> 

它應該工作,除非有其他問題。

EDIT:另一問題:

由於一個新元素Length<complexType>塊被宣佈,它需要被聲明爲"qualified"否則將不會是targetNamespace的一部分和所述限制將失敗。爲了解決這個問題,您可以:

  • 添加form="qualified"屬性<xs:element name="Length" ... />,或
  • 添加elementFormDefault="qualified" attribute to the`元素。

點擊此處瞭解詳情:

+0

您好,我同意你的看法。按照建議,我更改了XSD,並且出現如下錯誤(與以前的錯誤相同):無效。錯誤 - 第12,51行:org.xml.sax.SAXParseException; lineNumber:12; columnNumber:51; rcase-Recurse.2:粒子之間沒有完整的功能映射。錯誤 - 第12,51行:org.xml.sax.SAXParseException; lineNumber:12; columnNumber:51; derivation-ok-restriction.5.4.2:類型'RestrictedPasswordType'的錯誤。該類型的粒子不是基底粒子的有效限制 – marloncdomenech

+0

上面鏈接的基礎文檔沒有聲明「targetNamespace」。但是你在派生模式中聲明瞭一個。重新定義的模式應該與基本模式具有相同的'targetNamespace'。嘗試從架構中刪除屬性'xmlns'和'targetNamespace'。 – helderdarocha

+0

它工作。我脫掉了'xmlns'和'targetNamespace',它工作。但是,還有其他類似的文檔定義了不同於原始文件的'xmlns'和'targetNamespace',這些文件都是有效的。這裏是一個例子:[http://docs.oasis-open.org/security/saml/v2.0/saml-schema-authn-context-nomad-telephony-2.0.xsd。你知道爲什麼嗎? – marloncdomenech