次の方法で共有


FormsAuthentication.GetRedirectUrl メソッド

ログイン ページへのリダイレクトを引き起こした元の要求に対する、リダイレクト URL を返します。

名前空間: System.Web.Security
アセンブリ: System.Web (system.web.dll 内)

構文

'宣言
Public Shared Function GetRedirectUrl ( _
    userName As String, _
    createPersistentCookie As Boolean _
) As String
'使用
Dim userName As String
Dim createPersistentCookie As Boolean
Dim returnValue As String

returnValue = FormsAuthentication.GetRedirectUrl(userName, createPersistentCookie)
public static string GetRedirectUrl (
    string userName,
    bool createPersistentCookie
)
public:
static String^ GetRedirectUrl (
    String^ userName, 
    bool createPersistentCookie
)
public static String GetRedirectUrl (
    String userName, 
    boolean createPersistentCookie
)
public static function GetRedirectUrl (
    userName : String, 
    createPersistentCookie : boolean
) : String
適用できません。

パラメータ

  • userName
    認証済みユーザーの名前。
  • createPersistentCookie
    このパラメータは無視されます。

戻り値

リダイレクト URL が格納された文字列。

解説

アプリケーション コード内で RedirectFromLoginPage メソッドを使用しないでリダイレクトを実行する場合に、このメソッドを使用できます。

GetRedirectUrl メソッドは、クエリ文字列内で ReturnURL という変数名を使用して指定されている URL を返します。たとえば、https://www.contoso.com/login.aspx?ReturnUrl=caller.aspx という URL の場合、GetRedirectUrl メソッドは戻り先 URL として caller.aspx を返します。ReturnURL 変数がない場合、GetRedirectUrl メソッドは DefaultUrl プロパティの中の URL を返します。

ブラウザがログイン ページにリダイレクトされるときに、戻り先 URL が ASP.NET によって自動的に追加されます。

既定では、ReturnUrl 変数は現在のアプリケーション内のページを参照している必要があります。ReturnUrl が、異なるアプリケーション内のページや異なるサーバー上のページを参照している場合、GetRedirectUrl メソッドは DefaultUrl プロパティの中の URL を返します。戻り先 URL として現在のアプリケーションの外側のページを参照できるようにする場合は、forms 構成要素の enableCrossAppRedirects 属性を使用して、EnableCrossAppRedirects プロパティを true に設定する必要があります。

セキュリティに関するメモセキュリティに関するメモ :

EnableCrossAppRedirects プロパティを true に設定すると、アプリケーション間のリダイレクトがセキュリティ上の脅威につながることがあります。アプリケーション間のリダイレクトが許可されていると、サイトは、そのサイトのログイン ページを使用して Web サイトのユーザーに安全なページを使用していると信じこませる悪意のある Web サイトに対して無防備になります。アプリケーション間のリダイレクトを使用する場合にセキュリティを強化するには、GetRedirectUrl メソッドをオーバーライドして、承認された Web サイトへのリダイレクトだけを許可する必要があります。

使用例

認証済みユーザーを GetRedirectUrl メソッドから返された URL にリダイレクトするコード例を次に示します。

セキュリティに関するメモセキュリティに関するメモ :

この例には、ユーザー入力を受け付けるテキスト ボックスがあります。これにより、セキュリティが脆弱になる可能性があります。既定では、ASP.NET Web ページによって、ユーザー入力にスクリプトまたは HTML 要素が含まれていないかどうかが検証されます。詳細については、「スクリプトによる攻略の概要」を参照してください。

<%@ Page Language="VB" %>
<%@ Import Namespace="System.Web.Security" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  Private Sub Login_Click(sender As Object, e As EventArgs)
  
    ' Create a custom FormsAuthenticationTicket containing
    ' application specific data for the user.

    Dim username As String      = UserNameTextBox.Text
    Dim password As String      = UserPassTextBox.Text
    Dim isPersistent As Boolean = PersistCheckBox.Checked

    If Membership.ValidateUser(username, password) Then
    
      Dim userData As String = "ApplicationSpecific data for this user."

      Dim ticket As FormsAuthenticationTicket = New FormsAuthenticationTicket(1, _
        username, _
        DateTime.Now, _
        DateTime.Now.AddMinutes(30), _
        isPersistent, _
        userData, _
        FormsAuthentication.FormsCookiePath)

      ' Encrypt the ticket.
      Dim encTicket As String = FormsAuthentication.Encrypt(ticket)

      ' Create the cookie.
      Response.Cookies.Add(New HttpCookie(FormsAuthentication.FormsCookieName, encTicket))

      ' Redirect back to original URL.
      Response.Redirect(FormsAuthentication.GetRedirectUrl(username, isPersistent))
    Else    
      Msg.Text = "Login failed. Please check your user name and password and try again."
    End If
  End Sub

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Forms Authentication Login</title>
</head>
<body>
    <form id="form1" runat="server">
        <span style="BACKGROUND:#80ff80; font-weight:bold"> 
          Login Page
        </span> 
        <asp:Label id="Msg" ForeColor="maroon" runat="server" /><br />
        <table border="0">
            <tbody>
                <tr>
                    <td>Username:</td>
                    <td><asp:TextBox id="UserNameTextBox" runat="server" /></td>
                    <td>
                      <asp:RequiredFieldValidator id="RequiredFieldValidator1" 
                                                  runat="server" ErrorMessage="*" 
                                                  Display="Static" 
                                                  ControlToValidate="UserNameTextBox" />
                    </td>
                </tr>
                <tr>
                    <td>Password:</td>
                    <td><asp:TextBox id="UserPassTextBox" TextMode="Password" runat="server" /></td>
                    <td>
                      <asp:RequiredFieldValidator id="RequiredFieldValidator2" 
                                                  runat="server" ErrorMessage="*" 
                                                  Display="Static" 
                                                  ControlToValidate="UserPassTextBox" />
                    </td>
                </tr>
                <tr>
                    <td>Check here if this is
                        <span style="text-decoration:underline"> not </span>
                        <br />a public computer:</td>
                    <td><asp:CheckBox id="PersistCheckBox" runat="server" autopostback="true" /></td>
                </tr>
            </tbody>
        </table>

        <input type="submit" value="Login" runat="server" onserverclick="Login_Click" />
    </form>
</body>
</html>
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Security" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  private void Login_Click(Object sender, EventArgs e)
  {
    // Create a custom FormsAuthenticationTicket containing
    // application specific data for the user.

    string username     = UserNameTextBox.Text;
    string password     = UserPassTextBox.Text;
    bool   isPersistent = PersistCheckBox.Checked;

    if (Membership.ValidateUser(username, password))
    {
      string userData = "ApplicationSpecific data for this user.";

      FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
        username,
        DateTime.Now,
        DateTime.Now.AddMinutes(30),
        isPersistent,
        userData,
        FormsAuthentication.FormsCookiePath);

      // Encrypt the ticket.
      string encTicket = FormsAuthentication.Encrypt(ticket);

      // Create the cookie.
      Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

      // Redirect back to original URL.
      Response.Redirect(FormsAuthentication.GetRedirectUrl(username, isPersistent));
    }
    else
    {
      Msg.Text = "Login failed. Please check your user name and password and try again.";
    }
  }

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Forms Authentication Login</title>
</head>
<body>
    <form id="form1" runat="server">
        <span style="BACKGROUND: #80ff80; font-weight:bold"> 
            Login Page
        </span> 
        <asp:Label id="Msg" ForeColor="maroon" runat="server" /><br />
        <table border="0">
            <tbody>
                <tr>
                    <td>Username:</td>
                    <td><asp:TextBox id="UserNameTextBox" runat="server" /></td>
                    <td>
                      <asp:RequiredFieldValidator id="RequiredFieldValidator1" 
                                                  runat="server" ErrorMessage="*" 
                                                  Display="Static" 
                                                  ControlToValidate="UserNameTextBox" />
                    </td>
                </tr>
                <tr>
                    <td>Password:</td>
                    <td><asp:TextBox id="UserPassTextBox" TextMode="Password" runat="server" /></td>
                    <td>
                      <asp:RequiredFieldValidator id="RequiredFieldValidator2" 
                                                  runat="server" ErrorMessage="*" 
                                                  Display="Static" 
                                                  ControlToValidate="UserPassTextBox" />
                    </td>
                </tr>
                <tr>
                    <td>Check here if this is 
                        <span style="text-decoration:underline">not</span>
                        <br />a public computer:</td>
                    <td><asp:CheckBox id="PersistCheckBox" runat="server" autopostback="true" /></td>
                </tr>
            </tbody>
        </table>

        <input type="submit" value="Login" runat="server" onserverclick="Login_Click" />
    </form>
</body>
</html>

プラットフォーム

Windows 98,Windows Server 2000 SP4,Windows CE,Windows Millennium Edition,Windows Mobile for Pocket PC,Windows Mobile for Smartphone,Windows Server 2003,Windows XP Media Center Edition,Windows XP Professional x64 Edition,Windows XP SP2,Windows XP Starter Edition

Microsoft .NET Framework 3.0 は Windows Vista,Microsoft Windows XP SP2,および Windows Server 2003 SP1 でサポートされています。

バージョン情報

.NET Framework

サポート対象 : 3.0,2.0,1.1,1.0

参照

関連項目

FormsAuthentication クラス
FormsAuthentication メンバ
System.Web.Security 名前空間

その他の技術情報

ASP.NET Web アプリケーションのセキュリティ