2016-06-14 8 views
0

onelogin.com C#のサンプルアプリケーションを使用しようとしていますが、かなりバグが多いようです。最後に残った問題は、SAMLレスポンスXMLからUserIDのようなものを解析しようとしています。私はので、私は生のXMLツールを使用して、それをやろうとしているSAMLに建てられた.NETのいずれかの例C#コードを見つけるように見えることはできませんが、私は、ユーザーIDの一致を取得することはありません。ここでSAML 2.0の応答からUserIDを解析できません。XML

public string GetNameID() 
     { 
      XmlNamespaceManager manager = new XmlNamespaceManager(xmlDoc.NameTable); 
      manager.AddNamespace("ds", SignedXml.XmlDsigNamespaceUrl); 
      manager.AddNamespace("saml", "urn:oasis:names:tc:SAML:2.0:assertion"); 
      manager.AddNamespace("samlp", "urn:oasis:names:tc:SAML:2.0:protocol"); 

      XmlNode node = xmlDoc.SelectSingleNode("saml:Assertion/saml:Subject/saml:NameID", manager); 
      // node is now null! 
      return node.InnerText; // throws exception 
     } 

は私ですあなたがしたいタグを検索する代わりに、XMLにLINQを使用することができ

<trust:RequestSecurityTokenResponseCollection xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512"> 
    <trust:RequestSecurityTokenResponse> 
    <trust:RequestedSecurityToken> 
     <saml:Assertion xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Version="2.0" ID="pfxefe742da-7d6f-1f2a-85c6-0ab28c701748" IssueInstant="2016-06-14T12:14:56Z" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
     <saml:Subject> 
      <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">[email protected]</saml:NameID>   
     </saml:Subject> 
     </saml:Assertion> 
    </trust:RequestedSecurityToken> 
    </trust:RequestSecurityTokenResponse> 
</trust:RequestSecurityTokenResponseCollection> 
+1

これはSAML2プロトコルレスポンスではありません。これは、SAML2アサーションを含むWS-Trust応答です。 –

+0

@AndersAbelありがとうございます - これは初めてのことですが、なぜ私がオンラインの例で見たものとは異なるタイプの応答を見ているのか分かりませんでした。ご存じのように、私は今あなたのライブラリとテストサーバーを使用するように切り替えました。これは今は問題ではありません。 – NickG

答えて

0

:削除すべての無関係なノード/セクションを持っていた(重くカット)XML

XDocument xmlDoc = XDocument.Load(xmlFilePath); 
List<XElement> userIDs = (from element in xmlDoc.Descendants() 
          .Where(x => x.Name.LocalName.Contains("NameID")) 
          select element).ToList(); 

あなたは、その後のユーザーIDにアクセスすることができますのようなもの:

userIDs[index].Value; 

それとも、リストを反復する場合:

foreach (XElement element in userIDs) 
{ 
    element.Value; //Do something with this 
} 

は、ファイルの先頭にusing System.Xml.Linq;を追加することを忘れないでください!

関連する問題