web-dev-qa-db-ja.com

FormsAuthentication.SetAuthCookieはMVC 5で[認証]しません

_[Authorize]_で_FormsAuthentication.SetAuthCookie_属性をテストするために、新しいASP.NET MVC 5プロジェクトを作成しました。 1つのアクションで(Homeコントローラーで)Cookieを設定するだけです。

_    public ActionResult About()
    {
        FormsAuthentication.SetAuthCookie("someUser", false);
_

そして、私は別のものへのアクセスを制限します:

_    [Authorize]
    public ActionResult Contact()
    {
_

Webページを起動して_/home/contact_に移動すると、ログインページに正しくリダイレ​​クトされます。次に、_/home/about_に移動し、Cookieを取得して、連絡先ページに戻ります。しかし、私はまだログインページにリダイレクトされます-Cookieは私を認証/許可しません。

デバッガーで、Aboutページを複数回ロードすると_HttpContext.User.Identity.IsAuthenticated == false_になります(つまり、認証Cookieを設定した後でも認証されているとは見なされません)。

ここで行う必要のある追加のステップはありますか?基本認証に独自のIPrincipalを設定する必要はありませんか?

20
user655321

web.configから削除:

<modules>
  <!--<remove name="FormsAuthenticationModule" />-->
</modules>

または単純にweb.configの行を削除します

48
Jorge Rocha

編集:MVC5がデフォルトでフォーム認証を削除したことを知らなかった(モジュールが削除された)ので、これらすべてに関連して元の投稿の下でDSRのコメントも確認してください。

Web.configを確認し、認証セクションを探します。次のようになります。

<authentication mode="Forms">
  <forms loginUrl="..." cookieless="UseCookies" />
</authentication>

http://msdn.Microsoft.com/en-us/library/1d3t3c61%28v=vs.85%29.aspx

デフォルトのcookieless値は「UseDeviceProfile」です。これは、ブラウザーがcookieをサポートしていることを報告する場合はcookieが使用されることを意味します。

次に、ブラウザでCookieがオンになっていることを確認します。デバイス/ブラウザがCookieをサポートしていないか、Cookieがオフになっている場合、SetAuthCookieはURLを変更しますが、SetAuthCookieの呼び出し後にブラウザをリダイレクトする必要があります...

FormsAuthentication.RedirectFromLoginPage(String, Boolean)...

そのメソッドは、SetAuthCookieによる認証後にページを宛先にリダイレクトします。 RedirectFromLoginPageは、必要な属性をurlクエリに入れて、ポストバック全体でログインセッションを維持します。あちこちのサイトで独自のリダイレクトを行う場合、現在のユーザーがHttpContext.Current.User.Identity.IsAuthenticatedで認証されているかどうかをチェックすることにより、ポストバック全体でそのURLクエリパラメーターを維持する必要があります。

ユーザーをログインページに送信するには、使用する必要があります

FormsAuthentication.RedirectToLoginPage()

そのメソッドはreturnUrlパラメーターをクエリ文字列に追加し、後の関数「RedirectFromLoginPage」は認証後にリダイレクトされます。

パスおよびリソースへのweb.configのlocation要素を使用してユーザーまたはロールへのアクセスをブロックすると、認証されていないユーザーがアクセスを試みると、フォーム認証がログインページへのリダイレクトを自動的に処理します。

  <location path="SomeFolderOnYourSite">
    <system.web>
      <authorization>
        <deny users="?"/>
        <allow roles="Administrators"/>
      </authorization>
    </system.web>
  </location>
13
Ryan Mann

Formsタグのdomain属性に誤った値を指定すると、これも発生する可能性があります。

<authentication mode="Forms">
  <forms domain="localhost" ... />
</authentication>
0
CSharper
 <location path="SomeFolderOnYourSite">
<system.web>
  <authorization>
    <deny users="?"/>
    <allow roles="Administrators"/>
  </authorization>
</system.web>

少し変更して同じコードを使用しているときに機能していないようです_**<location path="~/SomeFolderOnYourSite"> <system.web> <authorization> <deny users="?"/> <allow roles="Administrators"/> </authorization> </system.web> </location>**

0
Purush