2012-03-12 9 views
3

私はそうのようにフォーマットされたSAMLトークンを持っている:MVC3でSAMLアサーションを使用して別のウェブサイトに投稿するにはどうすればよいですか?

<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" MajorVersion="1" MinorVersion="1" AssertionID="_341bea3b-f497-4a4f-adff-2bd65e44fd67" Issuer="http://127.0.0.1:81/" IssueInstant="2012-03-12T15:08:26.618Z"> 
<saml:Conditions NotBefore="2012-03-12T15:08:26.585Z" NotOnOrAfter="2012-04-23T07:08:26.585Z"> 
    <saml:AudienceRestrictionCondition> 
     <saml:Audience>http://127.0.0.2:83/</saml:Audience> 
    </saml:AudienceRestrictionCondition> 
</saml:Conditions> 
<saml:AttributeStatement> 
    <saml:Subject> 
     <saml:SubjectConfirmation> 
      <saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:bearer</saml:ConfirmationMethod> 
     </saml:SubjectConfirmation> 
    </saml:Subject> 
    <saml:Attribute AttributeName="name" AttributeNamespace="http://schemas.xmlsoap.org/ws/2005/05/identity/claims"> 
     <saml:AttributeValue>tempName</saml:AttributeValue> 
    </saml:Attribute> 
</saml:AttributeStatement> 
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
<ds:SignedInfo> 
    <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
    <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/> 
    <ds:Reference URI="#_341bea3b-f497-4a4f-adff-2bd65e44fd67"> 
     <ds:Transforms> 
      <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> 
      <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
     </ds:Transforms> 
     <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> 
     <ds:DigestValue>4dssZKnMKbLVftPXnSxZlDjrKnDtyQ8Sb7FRup6wkwE=</ds:DigestValue> 
    </ds:Reference> 
    </ds:SignedInfo> 
<ds:SignatureValue> 
REkPevPfjE86v+SCxGiomP2CConIVjTxuUpCIFDc+sAWUtEq3cMYZDwYfGKgEaSboIv1SUfYl8dUAEhQ+CjlCg7p3jF38f64HxexWHuLty2K+us74OmvK2F8CtG+xgwURAtJ14a6j/dTzuqzpn3hhHI7EXmrW1C5vrSAMQrVcyk= 
</ds:SignatureValue> 
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> 
<X509Data> 
    <X509Certificate> 
    MIICeDCCAeGgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBgDELMAkGA1UEBhMCR0IxDzANBgNVBAgTBkxvbmRvbjERMA8GA1UEBxMIVmljdG9yaWExITAfBgNVBAoTGFRob21zb25zIE9ubGluZSBCZW5lZml0czEUMBIGA1UECxMLRGV2ZWxvcG1lbnQxFDASBgNVBAMTC1Rlc3RpbmdDZXJ0MCAXDTExMDkxOTAwMDAwMFoYDzQwMDAwNzE5MTgwMzMzWjCBgDELMAkGA1UEBhMCR0IxDzANBgNVBAgTBkxvbmRvbjERMA8GA1UEBxMIVmljdG9yaWExITAfBgNVBAoTGFRob21zb25zIE9ubGluZSBCZW5lZml0czEUMBIGA1UECxMLRGV2ZWxvcG1lbnQxFDASBgNVBAMTC1Rlc3RpbmdDZXJ0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDC16AgeosO1rNdNU1nzAODZTcRuhoew3wJdVAbIcYqU57MLAYIhGIU/tovSGEOHnKjzNciYmXwLV6dVSCuygoOADNMAAgsfWYHDk2iZZLM8XuM2N6VVtJk/pc4wEITxBHLMqeCrJXTN/6JvTB1AHZWmfFm8jqMuMpXlowNEGoMJQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAExdjee3nfJ5wFtOrQcIwblrrM/XWfzhaj4Zzd6Bc/dofP44/PpMqwdyiJWYf/DmsXTM4YZ2HbdJyWXHCR+m/neWE1diVXlEAuArrjHDFWvsmqqK3bpKzSzabQF4wVxHaxbn49zUqale+tr5gXK36MKwq3I54ohd0T2i7HO8hKhF 
    </X509Certificate> 
</X509Data> 
</KeyInfo> 
</ds:Signature> 
</saml:Assertion> 

私は別のMVCアプリケーション内の別のページにMVCコントローラからリダイレクトし、トークンに沿って、このSAMLを通過したいです。これについて最善の方法は何ですか?

答えて

0

は私が

さてあなたは、ポスト実際にすることができます。..しかし、あなたが実際にMVCでRedirectWithPost()を行うことはできませんが、最善の方法は、他のアプリケーションにそのトークンをPOSTし、それはそれを処理させることですと言うでしょう新しいSystem.Net.Http.HttpClient()のようなものを使って他のアプリケーションに渡しますが、実際に新しいページに行くのではなく、ローカルで応答を処理することになります。

XMLをbase64でエンコードし、クエリ文字列にトークンを入れた標準のリダイレクトを使用して新しいアプリケーションにリダイレクトするとどうでしょうか?

Redirect(string.Concat(url, "?token=", Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(token)))); 
1

WIFモジュールはそれをしない(および他のいくつかのSTSプロバイダ)のようにあなたがそれを行うことができ、トークンを保持している、とJavaScriptスクリプト隠し入力してフォームを送り返すことにより、そのポスト先にフォーム。このような

何か:

<html> 
<head> 
<title>Working...</title> 
</head> 
<body> 
<form method="POST" name="hiddenform" action="http://emadashi.com/"><input type="hidden" name="wa" value="wsignin1.0" /> 
<input type="hidden" name="wresult" value="your-http-encoded-token-here" /> 
<noscript><p>Script is disabled. Click Submit to continue.</p> 
<input type="submit" value="Submit" /></noscript> 
</form> 
<script language="javascript">window.setTimeout('document.forms[0].submit()', 0);</script> 
</body> 
</html> 

そして、あなたはSignInRequestMessageクラスに掘る、およびメソッドWriteFormPostをチェックすると、あなたはそれがこのようなコードを吐くことがわかります。

この質問は遅くなりましたが、これはまだ誰かが答えを探しているのに役立ちます。

関連する問題