是否可以设置Windows Identity Foundation回发页面的样式?
这是您成功登录后显示为空白的页面,其网址类似于https://sts.address.com/?wa=wsignin1.0&wtrealm=https....
答案 0 :(得分:2)
我阅读了以下文章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 :(得分:1)
我不知道这是否是一个记录的功能,但我会建议以下作为起点:
如果您的代码看起来像我的一样,那么您有一行代码如下:
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:未将对象引用设置为对象的实例。 在System.Web.HttpResponse.End() 在Microsoft.IdentityModel.Web.FederatedPassiveSecurityTokenServiceOperations.ProcessSignInResponse(SignInResponseMessage signInResponseMessage,HttpResponse httpResponse) 在C:\ Logon App \ Logon App \ Code \ LCLogin \ LCLoginBase.vb中的Logon_App.LCLoginBase.issueTokenAndRedirect(logonParamsStruct& logonParams):行xxx