- - PR -
ASP.NETでForm認証の疑問
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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を指定しても普通に表示されてしまうのです。 なにか根本的に間違ってるでしょうか。 | ||||
|
投稿日時: 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-07-16 00:52
Jittaさん、ぬるぴょんさん、お返事有難うございます。
さて、Jittaさん、私が申し上げていたのは例えば、login.aspxに直接アクセスした際にログインを行うと、その後にリダイレクトするページはどうしてもdefault.aspxになってしまったと思います。 この設定を変更するのが、まず可能なのか、そしてその場合の方法が知りたい、というのが私の発言の主旨でした。(分かりにくかったと思いますが・・・。すみません。) いかがでしょうか? 宜しくお願いします。 | ||||
|
投稿日時: 2003-07-16 01:31
えっと、RedirectFromLoginPageを利用する場合、最初にlogin.aspxにアクセスする、
というのが間違ってるんじゃないかと。 最初にアクセスするのは制限されているメインページにしておいて、そこに リダイレクトさせるためのメソッドですから。 で、自分で飛び先を指定したい場合はSetAuthCookieを使って認証だけしてから Transferでもなんでも使えばいいはず。 | ||||
|
投稿日時: 2003-07-16 16:25
小野さん、有難うございます。
確かに用途として、直接アクセスするのは問題かも知れませんが、実際問題としてページ内にリンクで「ログイン」と入れて、リンク先を「login.aspx」にする場合などは十分想定されると思います。(私がそうしてしまった・・・) リダイレクト先は確かにResponse.Redirectなりで飛ばす形で十分対応できますので、運用上の問題はおっしゃる通り問題ありませんでした。有難うございました。また、SetAuthCookieと言うのを恥ずかしながら私知りませんでした・・・。調べて勉強したいと思います。勉強になります・・・。 また、練習して見ます。お騒がせしました。 | ||||
|
投稿日時: 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> だと思いますが、その部分を読めていないという感じでしょうか・・・。 | ||||
|
投稿日時: 2003-07-16 17:05
いえ、もう一つ。クッキーです。 すでに設定され、永続化している場合、指定したページが直接表示されます。 クッキーをすべて削除してみてください …といっても、この会議室もクッキーが設定されているしなぁ… C:\Documents and Settings\USER\Local Settings\Temporary Internet Files ここで、「Cookie:USER@url」という名前から、 対象のクッキーを探し、削除してみてください。 私の所では、「Cookie:jitta@localhost」でした。 |