用戶正在對REST WCF服務(我自己)進行身份驗證。憑據通過AJAX以Javascript和JSON格式發送。服務回覆一個確定的和很少的信息(重定向url)到客戶端,當驗證。FormsAuthenticate通過WCF(我如何使會話適用於瀏覽器?!)
現在,有一種爲外部認證提供的新方法,並且我必須創建一個緊湊的代碼片段,這些代碼片段很容易粘貼到一個asp.net代碼文件方法中運行的&。
一個典型的WCF請求最終可能會像這樣,
http://testuri.org/WebService/AuthenticationService.svc/ExtLogin?cId=197&aId=someName&password=!!pwd
我的代碼片段到目前爲止,
protected void bn_Click(object sender, EventArgs e)
{
WebHttpBinding webHttpBinding = new WebHttpBinding();
EndpointAddress endpointAddress = new EndpointAddress(url);
ContractDescription cd =
ContractDescription.GetContract(typeof(IAuthenticationService));
ServiceEndpoint sep = new ServiceEndpoint(cd);
sep.Behaviors.Add(new WebHttpBehavior());
sep.Address = endpointAddress;
sep.Binding = webHttpBinding;
var resp = new ChannelFactory<IAuthenticationService>(sepREST).CreateChannel();
LoginResult result = resp.ExtLogin(cId, aId, hashPwd);
Response.Redirect(result.RedirectUri);
// I.e. http://testuri.org/Profile.aspx (Require authenticated to visit)
}
我收到的響應/結果對象正確驗證答覆。所以,溝通很好。當重定向到實際的網站時,我沒有通過身份驗證。我找不到問題?如果我使用上面的URI(使用有效的證書)並粘貼到我的Webbrowser URL中,然後手動鍵入uri,我就會進行身份驗證。
我花了一天在網上搜索這個,沒有成功。
有很多信息,但似乎沒有適用。
我錯過了什麼?
我也嘗試了另一種方法,但同樣的問題仍然存在。
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uriWithParameters);
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.ContentType = "application/json";
request.Accept = "application/json";
request.Method = "GET";
string result;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
result = reader.ReadToEnd();
JavaScriptSerializer jsonDeserializer = new JavaScriptSerializer();
LoginResult contact = jsonDeserializer.Deserialize<LoginResult>(result);
Response.Redirect(result.RedirectUri);
謝謝你的嘗試。我想到了。當服務器端代碼進行身份驗證時,客戶端(Web瀏覽器)不知道。如果我在url中發出uri請求,那麼它是一個客戶端請求。但是,如何讓客戶端了解服務器端身份驗證? – Independent
我*認爲*您可以將cookie從HttpWebRequest請求中取出並保存到Web瀏覽器請求中 - 但我沒有嘗試過。 –
這真的讓我很難過。這個問題似乎更多地與HttpWebRequest獲得他們自己的會話(並且像其他頁面上的行爲一樣)相關。這意味着當我重定向時會話/ Cookies,來自另一個域的新會話嘗試到達禁區。 – Independent