2

会社用のカスタム SSO ソリューションを作成しているときに問題が発生しました。簡単に言うと、ユーザー認証状態をチェックするためにすべてのリクエストをインターセプトするカスタム認証 httpmodule を作成しました。認証されていない場合、ユーザーはカスタム sso ログイン ページにリダイレクトされます。

問題は、ユーザーが認証されていない場合、要求されたページ/リソースにアクセスできるかどうかを確認したいということです... Webフォームでは問題ありません.web.configに認証ブロックを追加し、UrlAuthorizationModule.CheckUrlAccessForPrincipalを使用します匿名ユーザーと。すべてが正常に動作します...

しかし、モジュールをMVC (3) Web サイトに適用すると、これが機能しなくなります (ルーティングを使用しているときに異なる URL から同じコントローラーやアクションにアクセスする可能性などの明らかな理由と、承認がコントローラー属性)。

どうすればこれを達成できますか?? 私は一日中検索してきましたが、それについては何も見つかりませんでした:/

4

2 に答える 2

0

私も同じ問題を抱えていました。
ここで解決策を参照してください: Webforms "UrlAuthorizationModule.CheckUrlAccessForPrincipal" に相当する MVC

他のコントローラーから情報を読み取る必要があります。これは、そのコンテキストと記述子をインスタンス化してから、そのコントローラーの AuthorizationContext をインスタンス化し、フィルター情報を読み取ることで実行できます。

于 2013-09-26T21:24:59.120 に答える
0

ASP.NET MVC 3 インターネット アプリケーション テンプレートには、次のアクションを (関連するモデルとビューと共に) 実装する基本的な AccountController が含まれています。

  • ログオン
  • 登録
  • ChangePassword / ChangePasswordSuccess

保護したいアクションまたはクラスの [Authorize] 属性が必要なだけです。しかし、本当にカスタムが必要な場合は、私が行ったようなことを行うことができます。

アプリケーションのセキュリティをオーバーライドするカスタム クラスを作成しました。

public class AuthorizeActivityAttribute : AuthorizeAttribute
    {
       protected override bool AuthorizeCore(HttpContextBase httpContext)
       {
        HttpContext currentContext = HttpContext.Current;

        //Do your custom authentication stuff here and return true or false depending on results
        Return true;
       }
    }

そして今、コントローラーには次のものがあります。

[AuthorizeActivity] 
        public ActionResult Index()
        {
            ViewBag.Message = "Welcome";

        return View();
        }
于 2012-07-23T18:10:58.107 に答える