是否可以設置Windows Identity Foundation回發頁的樣式?是否可以設置Windows Identity Foundation回發頁的樣式?
這是給人的印象是空白在您成功登錄後的頁面和URL類似於https://sts.address.com/?wa=wsignin1.0&wtrealm=https....
是否可以設置Windows Identity Foundation回發頁的樣式?是否可以設置Windows Identity Foundation回發頁的樣式?
這是給人的印象是空白在您成功登錄後的頁面和URL類似於https://sts.address.com/?wa=wsignin1.0&wtrealm=https....
我不知道這是否是一個記錄的功能,但我會建議以下爲jumping-客點:
如果你的代碼看起來什麼都像我一樣,你有一行代碼,看起來像:
FederatedPassiveSecurityTokenServiceOperations.ProcessSignInResponse(responseMessage, HttpContext.Current.Response)
的第二個參數是ProcesssignInResponse
HttpResponse對象。我試過了,沒有成功,找到一個回答你的問題,試圖在自定義HttpResponse
消息傳遞,以捕獲輸出,所以我們可以操縱它,只要你喜歡:
Dim myStringbuilder As New StringBuilder
Dim myStringWriter As New IO.StringWriter(myStringbuilder)
Dim myResponse As New Web.HttpResponse(myStringWriter)
如果您在myResponse
傳遞給ProcessSignInResponse
,引發以下例外:
System.NullReferenceException:未將對象引用設置爲對象的實例。用C 在System.Web.HttpResponse.End() 在Microsoft.IdentityModel.Web.FederatedPassiveSecurityTokenServiceOperations.ProcessSignInResponse(SignInResponseMessage signInResponseMessage,HttpResponse對象的HttpResponse) 在Logon_App.LCLoginBase.issueTokenAndRedirect(logonParamsStruct & logonParams):\登錄應用\登錄應用\代碼\ LCLogin \ LCLoginBase.vb:XXX行
我閱讀下面的文章,http://www.paraesthesia.com/archive/2011/01/31.aspx,這使我對Microsoft.IdentityModel裝配使用dotPeek。這讓我發現,所有ProcessSignInResponse
消息呢,是這樣的:
public static void ProcessSignInResponse(SignInResponseMessage signInResponseMessage, HttpResponse httpResponse)
{
if (signInResponseMessage == null)
throw DiagnosticUtil.ExceptionUtil.ThrowHelperArgumentNull("signInResponseMessage");
else if (httpResponse == null)
{
throw DiagnosticUtil.ExceptionUtil.ThrowHelperArgumentNull("httpResponse");
}
else
{
signInResponseMessage.Write(httpResponse.Output);
httpResponse.Flush();
httpResponse.End();
}
}
的signInResponseMessage.Write方法執行以下操作:
public override void Write(TextWriter writer)
{
if (writer == null)
{
throw DiagnosticUtil.ExceptionUtil.ThrowHelperArgumentNull("writer");
}
else
{
this.Validate();
writer.Write(this.WriteFormPost());
}
}
正如你所看到的,在本質上,所有的執行,將WriteFormPost
的內容寫入響應流。
因此,我們正在改變我的「ProcessSignIn
」方法以返回要輸出的HTML,而不是調用FederatedPassiveSecurityTokenServiceOperations.ProcessSignInResponse
。
所以,我從這裏改變了我的方法主要有:
public static void ProcessSignIn(SignInRequestMessage signInRequest, HttpResponse httpResponse)
{
FederatedPassiveSecurityTokenServiceOperations.ProcessSignInResponse(signInResponseMessage, httpResponse);
}
要:
public static string ProcessSignIn(SignInRequestMessage signInRequest)
{
return signInResponseMessage.WriteFormPost();
}
當然,SignInResponseMessage應該提供只返回「主」內容的清潔方法您希望寫入表單文章的內容,但將HTML表單作爲字符串獲取,至少可以在將結果返回給客戶端之前修改結果,更易於使用Response.Write(result)
。
+1不錯的黑客在那裏。 – 2011-07-29 12:33:38
這確實看起來像一個非常有前途的想法,我會嘗試直接寫信給自己,然後再將它交給WIF。 – 2010-07-27 22:05:19
驗證確實可行,但是它會創建無效的HTML,因爲寫入響應的任何內容都將在由WIF插入的html節點之外,但瀏覽器仍然可以合理地處理此問題。 – 2010-08-16 21:37:00