我已成功从客户端发布到 CA SiteMinder,但是,当我尝试进行服务器端发布时,我没有收到来自服务器的响应,但我确实收到了状态 200(OK)。我应该在响应或响应标头中返回 SMSESSION。我没有从帖子中得到任何回报。所以,我的代码如下(我在文件后面发布了我的整个代码,只需查看服务器端发布方法):
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Web.Services;
using System.Text;
using System.Net;
using System.IO;
using System.Collections;
namespace SiteMinder_SiteMinder_Side
{
public partial class login : System.Web.UI.Page
{
com.ezmultifactor.demoappliance.Service1 service = new com.ezmultifactor.demoappliance.Service1();
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Cookies["reauthen"] == null)
{
Response.Redirect(ConfigurationManager.AppSettings["secureauthUri"] + "?returnSession="+Server.UrlEncode(Request.QueryString["target"].Replace("-SM-","").Replace("$SM$","")));
}
else
{
LoadSession();
if (ConfigurationManager.AppSettings["ClientOrServerPost"] == "client")
{
ClientPost();
}
if (ConfigurationManager.AppSettings["ClientOrServerPost"] == "server")
{
ServerPost();
}
}
}
protected string createPramString()
{
String Params = String.Empty;
Params+=(String)Session["userName"]+"="+ Server.UrlEncode((String)Session["userNameValue"]);
Params+="&"+(String)Session["password"]+"="+ Server.UrlEncode((String)Session["passwordValue"]);
if ((String)Session["name1"] != "e" && (String)Session["value1"] != "e")
{
Params += "&" + (String)Session["name1"] + "=" + Server.UrlEncode((String)Session["value1"]);
}
if ((String)Session["name2"] != "e" && (String)Session["value2"] != "e")
{
Params += "&" + (String)Session["name2"] + "=" + Server.UrlEncode((String)Session["value2"]);
}
if ((String)Session["name3"] != "e" && (String)Session["value3"] != "e")
{
Params += "&" + (String)Session["name3"] + "=" + Server.UrlEncode((String)Session["value3"]);
}
if ((String)Session["name4"] != "e" && (String)Session["value4"] != "e")
{
Params += "&" + (String)Session["name4"] + "=" + Server.UrlEncode((String)Session["value4"]);
}
if ((String)Session["name5"] != "e" && (String)Session["value5"] != "e")
{
Params += "&" + (String)Session["name5"] + "=" + Server.UrlEncode((String)Session["value5"]);
}
if ((String)Session["name6"] != "e" && (String)Session["value6"] != "e")
{
Params += "&" + (String)Session["name6"] + "=" + Server.UrlEncode((String)Session["value6"]);
}
if ((String)Session["name7"] != "e" && (String)Session["value7"] != "e")
{
Params += "&" + (String)Session["name7"] + "=" + Server.UrlEncode((String)Session["value7"]);
}
if ((String)Session["name8"] != "e" && (String)Session["value8"] != "e")
{
Params += "&" + (String)Session["name8"] + "=" + Server.UrlEncode((String)Session["value8"]);
}
if ((String)Session["name9"] != "e" && (String)Session["value9"] != "e")
{
Params += "&" + (String)Session["name9"] + "=" + Server.UrlEncode((String)Session["value9"]);
}
if ((String)Session["name10"] != "e" && (String)Session["value10"] != "e")
{
Params += "&" + (String)Session["name10"] + "=" + Server.UrlEncode((String)Session["value10"]);
}
if ((String)Session["name11"] != "e" && (String)Session["value11"] != "e")
{
Params += "&" + (String)Session["name11"] + "=" + Server.UrlEncode((String)Session["value11"]);
}
if ((String)Session["name12"] != "e" && (String)Session["value12"] != "e")
{
Params += "&" + (String)Session["name12"] + "=" + Server.UrlEncode((String)Session["value12"]);
}
if ((String)Session["name13"] != "e" && (String)Session["value13"] != "e")
{
Params += "&" + (String)Session["name13"] + "=" + Server.UrlEncode((String)Session["value13"]);
}
return Params;
}
protected void ServerPost()
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create((String)Session["PostURL"]);
request.Method = "POST";
string postData = createPramString();
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
//request.PreAuthenticate = true;
//request.Credentials = CredentialCache.DefaultCredentials;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
Response.Write(((HttpWebResponse)response).GetResponseHeader("SESSION"));
dataStream = response.GetResponseStream();
for (int i = 0; i < response.Headers.Count; ++i)
Response.Write(response.Headers.Keys[i]+" : "+response.Headers[i]);
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
Response.Write(responseFromServer);
reader.Close();
dataStream.Close();
response.Close();
Response.End();
}
protected void ClientPost()
{
//Create HTML Doc
StringBuilder createhtm = new StringBuilder();
createhtm.Append("<body onload=\"document.forms.SecurePass.submit()\">");
createhtm.Append("<div>");
createhtm.Append("<form action=\"" + (String)Session["PostURL"] + "\" method=\"post\" id=\"SecurePass\">");
createhtm.Append("<input type=\"text\" style=\"display:none\" name=\"" + (String)Session["userName"] + "\" " + "value=\"" + (String)Session["userNameValue"] + "\">");
createhtm.Append("<input type=\"password\" style=\"display:none\" name=\"" + (String)Session["password"] + "\" " + "value=\"" + (String)Session["passwordValue"] + "\">");
if ((String)Session["name1"] != "e" && (String)Session["value1"] != "e")
{
createhtm.Append("<input type=\"hidden\" name=\"" + (String)Session["name1"] + "\" " + "value=\"" + (String)Session["value1"] + "\">");
}
if ((String)Session["name2"] != "e" && (String)Session["value2"] != "e")
{
createhtm.Append("<input type=\"hidden\" name=\"" + (String)Session["name2"] + "\" " + "value=\"" + (String)Session["value2"] + "\">");
}
if ((String)Session["name3"] != "e" && (String)Session["value3"] != "e")
{
createhtm.Append("<input type=\"hidden\" name=\"" + (String)Session["name3"] + "\" " + "value=\"" + (String)Session["value3"] + "\">");
}
if ((String)Session["name4"] != "e" && (String)Session["value4"] != "e")
{
createhtm.Append("<input type=\"hidden\" name=\"" + (String)Session["name4"] + "\" " + "value=\"" + (String)Session["value4"] + "\">");
}
if ((String)Session["name5"] != "e" && (String)Session["value5"] != "e")
{
createhtm.Append("<input type=\"hidden\" name=\"" + (String)Session["name5"] + "\" " + "value=\"" + (String)Session["value5"] + "\">");
}
if ((String)Session["name6"] != "e" && (String)Session["value6"] != "e")
{
createhtm.Append("<input type=\"hidden\" name=\"" + (String)Session["name6"] + "\" " + "value=\"" + (String)Session["value6"] + "\">");
}
if ((String)Session["name7"] != "e" && (String)Session["value7"] != "e")
{
createhtm.Append("<input type=\"hidden\" name=\"" + (String)Session["name7"] + "\" " + "value=\"" + (String)Session["value7"] + "\">");
}
if ((String)Session["name8"] != "e" && (String)Session["value8"] != "e")
{
createhtm.Append("<input type=\"hidden\" name=\"" + (String)Session["name8"] + "\" " + "value=\"" + (String)Session["value8"] + "\">");
}
if ((String)Session["name9"] != "e" && (String)Session["value9"] != "e")
{
createhtm.Append("<input type=\"hidden\" name=\"" + (String)Session["name9"] + "\" " + "value=\"" + (String)Session["value9"] + "\">");
}
if ((String)Session["name10"] != "e" && (String)Session["value10"] != "e")
{
createhtm.Append("<input type=\"hidden\" name=\"" + (String)Session["name10"] + "\" " + "value=\"" + (String)Session["value10"] + "\">");
}
if ((String)Session["name11"] != "e" && (String)Session["value11"] != "e")
{
createhtm.Append("<input type=\"hidden\" name=\"" + (String)Session["name11"] + "\" " + "value=\"" + (String)Session["value11"] + "\">");
}
if ((String)Session["name12"] != "e" && (String)Session["value12"] != "e")
{
createhtm.Append("<input type=\"hidden\" name=\"" + (String)Session["name12"] + "\" " + "value=\"" + (String)Session["value12"] + "\">");
}
if ((String)Session["name13"] != "e" && (String)Session["value13"] != "e")
{
createhtm.Append("<input type=\"hidden\" name=\"" + (String)Session["name13"] + "\" " + "value=\"" + (String)Session["value13"] + "\">");
}
createhtm.Append("</form>");
createhtm.Append("</div>");
createhtm.Append("</body>");
Response.Write(createhtm);
}
protected void LoadSession()
{
//Response.Write(Request.Cookies["reauthen"].Value);
//Response.End();
String credential = service.DecryptData(Request.Cookies["reauthen"].Value);
String[] splitcredential = credential.Split('_');
Session["userName"] = "USER";
Session["password"] = "PASSWORD";
Session["userNameValue"] = splitcredential[1];
Session["passwordValue"] = splitcredential[2];
Session["PostURL"] = ConfigurationManager.AppSettings["postURL"];
if (ConfigurationManager.AppSettings["ShowSession"] == "true")
{
foreach (string key in Session.Keys)
{
Response.Write(key + "-" + Session[key] + "<br />");
}
Response.End();
}
}
}
}