C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

フォーム認証について


(過去ログ 6 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■6264 / inTopicNo.1)  フォーム認証について
  
□投稿者/ PG2ヶ月目 二等兵(1回)-(2006/09/04(Mon) 21:43:20)

分類:[C#] 


分類:[C#] 

はじめまして PG業務歴2ヶ月目の者です。
現在Visual Studio2003 C#を用いて開発を行っております。
早速なのですが、質問をさせてください。

現在、ログイン画面を作成しています。

・MSDN等を参考に、WebConfigファイルを生成しました。
・パスワード、ユーザIDはDBから取得し、ザーバ側で認証しています。
・System.Web.Security.FormsAuthentication.RedirectFromLoginPage()メソッド
 を使用してチケット発行を行っています。
・ログイン後はJavaScriptのShowModalDialog()を使用してフレームセットのhtml
 ファイルを経由してMainMenu.aspx画面をモーダルなポップアップ画面として
 開きます。(モーダルな画面でポストバック時のポップアップを防止するため)

以上のようなコーディングをしています。困っていることは、
1.
System.Web.Security.FormsAuthentication.RedirectFromLoginPage()メソッドをコメントアウトすると、ログインに成功してもログイン画面が再表示される。
2.
System.Web.Security.FormsAuthentication.RedirectFromLoginPage()メソッドを実行して処理を進めると、「WebApplication.default.aspxが存在しません」という作成していないファイルがないと言われエラーになる。
3.
スクリプトを使用せず、Respons.RedirectでMainMenuに遷移させると正常に作動する

あれこれと調べているのですが、まったく分からず作業が滞っています。どなたか分かる方が居られれば御教授いただけたらと思います。
よろしくお願いします。

0
引用返信 編集キー/
■6268 / inTopicNo.2)  Re[1]: フォーム認証について
□投稿者/ 中博俊 神(712回)-(2006/09/04(Mon) 22:41:18)
中博俊 さんの Web サイト

分類:[C#] 

どんなソースかわからないからなんとも・・・・

0
引用返信 編集キー/
■6278 / inTopicNo.3)  Re[2]: フォーム認証について
□投稿者/ PG2ヶ月目 二等兵(3回)-(2006/09/05(Tue) 08:59:56)

分類:[C#] 

> どんなソースかわからないからなんとも・・・・

すいません。関連のありそうな部分を抜粋して載せます。

【Login.aspx】
-ログインボタン押下時-
//チケット発行
System.Web.Security.FormsAuthentication.RedirectFromLoginPage("ログインID", false);

--略--

-認証後処理-
string TargetUrl = "/WebApplication/MainDummy.htm";
string script;
string sendpath;
int Width = 900;
int Height = 700;

sendpath = TargetUrl;// + "?&" + DIALOGBOX_SEND_PARAM_ISPOPUP + "=" + TypeConst.AriNashi.FLG_ARI;

script = "<SCRIPT LANGUAGE='javascript'>";
script += Environment.NewLine + "window.showModalDialog('"
    + sendpath + "', '_Brank', 'dialogWidth=" + Width.ToString()
    + "px;dialogHeight=" + Height.ToString() + "px;resizable
    = yes;help=no ; scroll = yes');";
script += Environment.NewLine + "</SCRIPT>";

Response.Write(script);


【WebConfig】
<authentication mode="Forms">
    <forms loginUrl="Login.aspx" name="sqlAuthCookie" timeout="60" path="/">
</forms>
</authentication>

<authorization>
<deny users="?" />
<allow users="*" />
<!-- 全ユーザーへの許可 -->
<!-- <allow users="[ユーザーのコンマ区切り一覧]"
roles="[ロールのコンマ区切り一覧]"/>
<deny users="[ユーザーのコンマ区切り一覧]"
roles="[ロールのコンマ区切り一覧]"/>
-->
</authorization>


【MainDummy.htm】
<html>
<head>
<title></title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="ProgId" content="VisualStudio.HTML">
<meta name="Originator" content="Microsoft Visual Studio .NET 7.1">
</head>
<FRAMESET rows="*" frameborder="0" border="0" framespacing="0">
<FRAME id="frameDialog" name="frameDialog" src="/WebApplication/MainMenu.aspx" noresize scrolling="no"
frameborder="0">
</FRAMESET>
</html>

以上です。足りない部分がありましたら、お教えください。
私も今から引き続き調査を致しますが、よろしくお願いします。

0
引用返信 編集キー/
■6280 / inTopicNo.4)  Re[3]: フォーム認証について
□投稿者/ 中博俊 神(715回)-(2006/09/05(Tue) 09:23:03)
中博俊 さんの Web サイト

分類:[C#] 

・・・
ごめんおいらじゃわからん。
HTMLなんかどうでもいいからソース載せて。
どうなって欲しいのかもう一度整理して

0
引用返信 編集キー/
■6283 / inTopicNo.5)  Re[4]: フォーム認証について
□投稿者/ PG2ヶ月目 二等兵(4回)-(2006/09/05(Tue) 09:43:44)

分類:[C#] 

No6280に返信(中博俊さんの記事)
> ・・・
> ごめんおいらじゃわからん。
> HTMLなんかどうでもいいからソース載せて。
> どうなって欲しいのかもう一度整理して

private void btnLoginTest_Click(object sender, System.EventArgs e)
{
InHeader inHeader = new InHeader();

try
{
//ログイン日を取得
string login_date = DateTime.Today.ToString("yyyy/MM/dd");

//InHeader情報設定
inHeader.Login_Date = DateTime.Now.ToString();
inHeader.ScreenId = ScreenConst.LOGIN_SCREENID;
inHeader.ScreenName = ScreenConst.LOGIN_SCREENNAME;
inHeader.UserInfo = new UserAccount();
inHeader.UserInfo.Syain_Code = SYSTEM_USER_ID;
inHeader.UserInfo.Syain_Name = SYSTEM_USER_NAME;
inHeader.UserInfo.S_Code = SYSTEM_S_CODE;

//ユーザー情報取得
InLoginTestServiceGetLoginInfo inParam = new InLoginTestServiceGetLoginInfo();
OutLoginTestServiceGetLoginInfo outParam;
LoginService txn = new LoginService();

inParam.Header = inHeader;
inParam.LoginId = txtLoginTest.Text.Trim();
inParam.Password = txtPasswordTest.Text.Trim();
outParam = txn.GetLoginTestInfo(inParam);
if( outParam.Header.Status == Const.STS_WARNING )
{
this.txtLoginMessage.Text = outParam.loginId_false_message;
return;
}
else if( outParam.Header.Status == Const.STS_ERROR )
{
base.SetReturnStatsu(inParam.Header, outParam.Header);
return;
}

// セッション登録
SessionState.Save(Page, SESSION_USERINFO, outParam.UserAccountInfo);

//入力された社員コードをContext.Itemsにセット
Context.Items[CONTEXTITEM_SYAIN_CODE] = inParam.LoginId;

//ロール情報取得
RoleInfo[] roleInfo = (RoleInfo[])Cache[CACHE_ROLEINFO];
if( roleInfo == null )
{
RoleService txnRoleService = new RoleService();
InRoleServiceGetRoleInfo inRoleServiceGetRoleInfo = new InRoleServiceGetRoleInfo();
OutRoleServiceGetRoleInfo outRoleServiceGetRoleInfo = new OutRoleServiceGetRoleInfo();

inRoleServiceGetRoleInfo.Header = inHeader;
outRoleServiceGetRoleInfo = txnRoleService.GetRoleInfo(inRoleServiceGetRoleInfo);
if( !base.SetReturnStatsu(inHeader, outRoleServiceGetRoleInfo.Header) )
{
return ;
}

//サーバーキャッシュに登録
Cache[CACHE_ROLEINFO] = roleInfo = outRoleServiceGetRoleInfo.Role_Info;
}

//パスワードのロックフラグ・初回フラグ判定
//どちらかの条件にあえば強制的にパス変更画面へ遷移
//セッションにログインタイプをセット
if (!outParam.first_login_flg)
{
//初回ログインフラグが「なし」なら
// セッション登録
SessionState.Save(Page, SESSION_LOGIN_FLG_KEY, LOGINTYPE_FIRST);
//Server.Transfer(base.GetScreenPath(ScreenConst.SA006_PATH));
Response.Redirect(base.GetScreenPath(ScreenConst.SA006_PATH), true);
return ;
}
else if ( DateTime.Parse(login_date) > outParam.password_effect_date )
{
//パスワードの有効期限が切れていたら
// セッション登録
SessionState.Save(Page, SESSION_LOGIN_FLG_KEY, LOGINTYPE_LIMIT);
Response.Redirect(base.GetScreenPath(ScreenConst.SA006_PATH), true);
return ;
}

//チケット発行
System.Web.Security.FormsAuthentication.RedirectFromLoginPage(this.txtLoginTest.Text.Trim(), false);

//初期表示画面表示
if( base.CheckControl_Code(ScreenConst.MAINMENU_SCREENID, TypeConst.Control_Type.VIEW))
{
string TargetUrl = "/WebApplication/MainDummy.htm";
string script;
string sendpath;
int Width = 900;
int Height = 700;

sendpath = TargetUrl + "?&" + DIALOGBOX_SEND_PARAM_ISPOPUP + "=" + TypeConst.AriNashi.FLG_ARI;

script = "<SCRIPT LANGUAGE='javascript'>";
// script += Environment.NewLine + "window.showModalDialog('" + sendpath + "', '_Brank', 'status=yes,dialogWidth=" + Width.ToString() + "px,dialogHeight=" + Height.ToString() + "px,toolbar=no,resizable=yes,scrollbars=yes,help=no');";
script += Environment.NewLine + "window.showModalDialog('" + sendpath + "', '_Brank', 'status = yes;dialogWidth=" + Width.ToString() + "px;dialogHeight=" + Height.ToString() + "px;resizable = yes;help=no ; scroll = yes');";
script += Environment.NewLine + "</SCRIPT>";

Response.Write(script);
// Response.Redirect(base.GetScreenPath(ScreenConst.MAINMENU_PATH), true);
}
else if( base.CheckControl_Code(ScreenConst.SA351_SCREENID, TypeConst.Control_Type.VIEW))
{
Server.Transfer(base.GetScreenPath(ScreenConst.SA351_PATH));
}
else
{
base.OpenApplicationError(inHeader, Utility.SetOutHeader(MsgConst.CMN_ERROR_NOTHING_ROLEINFO));
}

}
catch(Exception ex)
{
throw new Exception(ex.Message, ex);
}

}


【WebConfig】
<authentication mode="Windows" />

<authorization>
<allow users="*" /> <!-- 全ユーザーへの許可 -->
</authorization>

以上が現状のログインボタン押下時+Webconfig(一部)のソースです。

どうなって欲しいのか は、
フォーム認証を適用させて不正遷移をされた場合、ログイン画面へ強制遷移させたいのです。
現状、今の状況ではshowModalDialog実行時にhttpエラーが起こります。
チケット発行を行わなければ普通に動作はするのですが、不正遷移もできてしまいます(セッションがないので結局は表示されないのですが、ここでは置いておきます)。WebConfigだけ最初の投稿時のように修正すると、ログイン画面がループします。
とても分かりにくい説明で本当に申し訳ございません。

0
引用返信 編集キー/
■6284 / inTopicNo.6)  Re[5]: フォーム認証について
□投稿者/ 中博俊 神(718回)-(2006/09/05(Tue) 10:08:25)
中博俊 さんの Web サイト

分類:[C#] 

>フォーム認証を適用させて不正遷移
認証が通っていれば、不正な遷移なんてものは存在しませんよ?
もしも自分が思ったルート意外では絶対にだめなんだって言うなら、それなりにセッション管理してそれ以外ならチケット剥奪すれば良いんじゃないの?


0
引用返信 編集キー/
■6286 / inTopicNo.7)  Re[6]: フォーム認証について
□投稿者/ PG2ヶ月目 二等兵(5回)-(2006/09/05(Tue) 10:35:27)

分類:[C#] 

No6284に返信(中博俊さんの記事)
> >フォーム認証を適用させて不正遷移
> 認証が通っていれば、不正な遷移なんてものは存在しませんよ?
> もしも自分が思ったルート意外では絶対にだめなんだって言うなら、それなりにセッション管理してそれ以外ならチケット剥奪すれば良いんじゃないの?
>

今は認証が通って、チケットを発行しても、showModalDialogメソッドで指定したページに遷移してくれなくて困っています。不正な遷移はできないようになっているみたいでした。すいません。

0
引用返信 編集キー/
■6288 / inTopicNo.8)  Re[7]: フォーム認証について
□投稿者/ PG2ヶ月目 二等兵(6回)-(2006/09/05(Tue) 12:13:54)

分類:[C#] 

System.Web.Security.FormsAuthentication.RedirectFromLoginPage
のメソッドを
System.Web.Security.FormsAuthentication.SetAuthCookie
に変更したところ、正常に動作しました。
ありがとうございました。

解決済み
引用返信 編集キー/
■6309 / inTopicNo.9)  Re[8]: フォーム認証について
□投稿者/ Jitta 准尉(103回)-(2006/09/05(Tue) 20:46:33)
Jitta さんの Web サイト

分類:[C#] 

> フォーム認証を適用させて不正遷移をされた場合、ログイン画面へ強制遷移させたいのです。
 「フォーム認証」と、「不正遷移」は、まったく別のものなのですが、それは理解されています?
 認証では、不正な画面遷移を防ぐことは出来ません。権限のない人が、表示するのを防ぐために用います。
 画面遷移の制御は、リファラーを見たり、ステート サーバを自作します。エンタープライズ ライブラリにあったかな?


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -