- PR -

ASP.NETでForm認証の疑問

投稿者投稿内容
ぬるぴょん
ベテラン
会議室デビュー日: 2003/06/02
投稿数: 62
投稿日時: 2003-07-14 22:40
モデラートさん、Jittaさん ありがとうございます。

なかなかうまくいかないので
テスト用にシンプルなプロジェクトを作ってみましたが
結果は同じでした。

以下、その構成です。

LoginPage.aspxとDefault.aspxを用意。
LoginPage.aspxはボタンのみ配置しスタートページに設定。
IISの構成はドキュメントタブにてDefault.aspxのみ。

●LoginPage.aspx
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
System.Web.Security.FormsAuthentication.RedirectFromLoginPage("testUser", True)
End Sub

●web.config
<authentication mode="Forms">
<forms loginUrl = "LoginPage.aspx" name = ".ASPXFORMSAUTH" />
</authentication>

<authorization>
<deny users="?"/>
</authorization>


この状態で実行し、LoginPage.aspxのボタンを押すとDefault.aspxが表示されるが、URLは普通に
[http:]//localhost/WebApplication10/default.aspx
となっている。

また、LoginPageを通さずに直接Default.aspxを指定しても普通に表示されてしまうのです。

なにか根本的に間違ってるでしょうか。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-07-15 09:18
すみません、1つ間違えていました。
間違い>[http:]//localhost/Test/WebApplication1/
正解>[http:]//localhost/Test/WebApplication1/WebForm1.aspx

ディレクトリのみ指定すると、「このページの表示が認められていません」でした。
それから動きですが、アドレスに
[http:]//localhost/Test/WebApplication1/WebForm1.aspx
を指定すると、
[http:]//localhost/Test/WebApplication1/LoginPage.aspx?ReturnUrl=%2fTest%2fWebApplication1%2fWebForm1.aspx
となります。認証後にWebForm1.aspxが表示されたときは、
[http:]//localhost/Test/WebApplication1/WebForm1.aspx
です。

Web.config
<authentication mode="Forms">
<forms loginUrl="LoginPage.aspx" name=".AUTH" />
</authentication>

LoginPage.aspx.vb
' 認証成功
Dim ticket As New FormsAuthenticationTicket(1, userName.Value _
, Date.Now, Date.Now.AddHours(8.0), True, "" _
, FormsAuthentication.FormsCookiePath)
Dim encTicket As String = FormsAuthentication.Encrypt(ticket)
Response.Cookies.Add(New HttpCookie( _
FormsAuthentication.FormsCookieName, encTicket))
FormsAuthentication.RedirectFromLoginPage(userName.Value, True)


 斜体にしたTrueですが、クッキーの永続性を定義するものです。
これをTrueにしておくと、永続クッキーが作られ、
1度認証すると以後2050年くらいまで有効です。
Falseにすると、私の例の場合、8時間有効です。
この、“チケット”は発行していますか?

#「IEを終了しても8時間は再認証の必要なし」にしたいのに、うまくいかないのだ
モデラート
会議室デビュー日: 2003/06/29
投稿数: 9
お住まい・勤務地: 東京都
投稿日時: 2003-07-16 00:52
Jittaさん、ぬるぴょんさん、お返事有難うございます。

さて、Jittaさん、私が申し上げていたのは例えば、login.aspxに直接アクセスした際にログインを行うと、その後にリダイレクトするページはどうしてもdefault.aspxになってしまったと思います。

この設定を変更するのが、まず可能なのか、そしてその場合の方法が知りたい、というのが私の発言の主旨でした。(分かりにくかったと思いますが・・・。すみません。)

いかがでしょうか?
宜しくお願いします。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-07-16 01:31
えっと、RedirectFromLoginPageを利用する場合、最初にlogin.aspxにアクセスする、
というのが間違ってるんじゃないかと。
最初にアクセスするのは制限されているメインページにしておいて、そこに
リダイレクトさせるためのメソッドですから。

で、自分で飛び先を指定したい場合はSetAuthCookieを使って認証だけしてから
Transferでもなんでも使えばいいはず。

モデラート
会議室デビュー日: 2003/06/29
投稿数: 9
お住まい・勤務地: 東京都
投稿日時: 2003-07-16 16:25
小野さん、有難うございます。

確かに用途として、直接アクセスするのは問題かも知れませんが、実際問題としてページ内にリンクで「ログイン」と入れて、リンク先を「login.aspx」にする場合などは十分想定されると思います。(私がそうしてしまった・・・)

リダイレクト先は確かにResponse.Redirectなりで飛ばす形で十分対応できますので、運用上の問題はおっしゃる通り問題ありませんでした。有難うございました。また、SetAuthCookieと言うのを恥ずかしながら私知りませんでした・・・。調べて勉強したいと思います。勉強になります・・・。

また、練習して見ます。お騒がせしました。
ぬるぴょん
ベテラン
会議室デビュー日: 2003/06/02
投稿数: 62
投稿日時: 2003-07-16 16:41
どうしてもJittaさんのように認証前にWebForm1.aspxを直接指定しても

[http:]//localhost/Test/WebApplication1/LoginPage.aspx?ReturnUrl=%2fTest%2fWebApplication1%2fWebForm1.aspx

のようにURLに表示されず、普通に
[http:]//localhost/Test/WebApplication1/WebForm1.aspx
となります。

やはり上記のLoginPage.aspxにリダイレクトされるという動きのキモは
Web.configの
<authentication mode="Forms">
<forms loginUrl="LoginPage.aspx" name=".AUTH" />
</authentication>
だと思いますが、その部分を読めていないという感じでしょうか・・・。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-07-16 17:05
引用:

ぬるぴょんさんの書き込み (2003-07-16 16:41) より:

やはり上記のLoginPage.aspxにリダイレクトされるという動きのキモは
Web.configの
<authentication mode="Forms">
<forms loginUrl="LoginPage.aspx" name=".AUTH" />
</authentication>
だと思いますが、その部分を読めていないという感じでしょうか・・・。


 いえ、もう一つ。クッキーです。
すでに設定され、永続化している場合、指定したページが直接表示されます。
クッキーをすべて削除してみてください
…といっても、この会議室もクッキーが設定されているしなぁ…

C:\Documents and Settings\USER\Local Settings\Temporary Internet Files

ここで、「Cookie:USER@url」という名前から、
対象のクッキーを探し、削除してみてください。
私の所では、「Cookie:jitta@localhost」でした。

スキルアップ/キャリアアップ(JOB@IT)