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 名前空間