1

Windows Identity Foundation ポストバック ページのスタイルを設定することはできますか?

これは、ログインに成功した後に空白として表示されるページであり、URL は次のようになります。https://sts.address.com/?wa=wsignin1.0&wtrealm=https....

4

2 に答える 2

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)

于 2011-07-29T09:36:55.110 に答える
1

これが文書化された機能かどうかはわかりませんが、出発点として次のことを提案します。

あなたのコードが私のものとまったく同じように見える場合、次のようなコード行があります。

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)

に渡すとmyResponseProcessSignInResponse次の例外がスローされます。

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行目

于 2010-07-27T21:02:19.847 に答える