/// <summary>VerifyRedirect</summary> /// <param name="queryString">string</param> /// <param name="dsRSAwithSHA1">DigitalSign</param> /// <returns>bool</returns> public static bool VerifyRedirect(string queryString, DigitalSign dsRSAwithSHA1) { // EcodeRedirectの逆 // Signatureの抽出 string signature = StringExtractor.GetParameterFromQueryString("Signature", queryString); // Signatureの削除 queryString = queryString.Replace("&Signature=" + signature, ""); // queryString : ASCIIデコード // signature : パラメタ → URLデコード → Base64デコード if (dsRSAwithSHA1.Verify( CustomEncode.StringToByte(queryString, CustomEncode.us_ascii), CustomEncode.FromBase64String(CustomEncode.UrlDecode(signature)))) { // 署名検証 OK return(true); } else { // 署名検証 NG return(false); } }
/// <summary>DecodeRedirect</summary> /// <param name="queryString">string</param> /// <returns>デコードされたsaml</returns> public static string DecodeRedirect(string queryString) { // EcodeRedirectの逆 // -------------------------------------------------- // Saml → URLデコード → Base64デコード // → DEFLATE解凍 → XML宣言のエンコーディング → XML // -------------------------------------------------- // Samlの抽出 string saml = ""; if (queryString.IndexOf("SAMLRequest") != -1) { saml = StringExtractor.GetParameterFromQueryString("SAMLRequest", queryString); } else if (queryString.IndexOf("SAMLResponse") != -1) { saml = StringExtractor.GetParameterFromQueryString("SAMLResponse", queryString); } else { return(""); } byte[] tempByte = DeflateCompression.Decompress( CustomEncode.FromBase64String(CustomEncode.UrlDecode(saml))); //// XML宣言部分を取得するために、us_asciiでデコード //string tempString = CustomEncode.ByteToString(tempByte, CustomEncode.us_ascii); //// エンコーディング オブジェクトの取得 //Encoding enc = XmlLib.GetEncodingFromXmlDeclaration(tempString); return(CustomEncode.ByteToString(tempByte, CustomEncode.us_ascii)); // enc.CodePage); }