代码之家  ›  专栏  ›  技术社区  ›  Chris Marisic

是否可以设置Windows Identity Foundation回发页的样式?

  •  1
  • Chris Marisic  · 技术社区  · 14 年前

    是否可以设置Windows Identity Foundation回发页的样式?

    这是您成功登录后显示为空白的页面,url类似于 https://sts.address.com/?wa=wsignin1.0&wtrealm=https....

    2 回复  |  直到 14 年前
        1
  •  1
  •   Vivian River    14 年前

    我不知道这是否是一个有文档记录的特性,但我建议从以下方面入手:

    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() 在登录时\u App.LCLoginBase.issueTokenAndRedirect(logonparmsstruct&logonParams)在C:\Logon-App\Logon-App\Code\LCLogin\LCLoginBase.vb中:第xxx行

        2
  •  2
  •   Erik A. Brandstadmoen    13 年前

    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 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) .