Windows Identity Foundation ポストバック ページのスタイルを設定することはできますか?
これは、ログインに成功した後に空白として表示されるページであり、URL は次のようになります。https://sts.address.com/?wa=wsignin1.0&wtrealm=https....
次の記事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)
。
これが文書化された機能かどうかはわかりませんが、出発点として次のことを提案します。
あなたのコードが私のものとまったく同じように見える場合、次のようなコード行があります。
FederatedPassiveSecurityTokenServiceOperations.ProcessSignInResponse(responseMessage, HttpContext.Current.Response)
の 2 番目のパラメーター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) で Logon_App.LCLoginBase.issueTokenAndRedirect (logonParamsStruct& logonParams) で C:\Logon App\Logon App\Code\LCLogin \LCLoginBase.vb:xxx行目