asp.net-mvc 認証 クレームベースの権限をMVC 3に追加する




rbac asp net core (2)

私はクレームベースの認証を追加したいMVCアプリケーションを持っています。 近い将来、ADFS2をフェデレーションIDとして使用しますが、今はフォームの認証をローカルで使用します。

外部のアイデンティティプロバイダなしでWIFを使用する最良の方法についてチュートリアルやブログの投稿を見た人はいますか?

私は次のことを見てきましたが、それは今一歳です。私は簡単な解決策があるべきだと思います。

http://geekswithblogs.net/shahed/archive/2010/02/05/137795.aspx


STSなしでMVCでWIFを使用できます。

私はデフォルトのMVC2テンプレートを使用しましたが、MVC 3でもうまくいくはずです。

必要がある:

1-プラグインWIFのSessionAuthenticationModule (web.config)

< add name="SessionAuthenticationModule" type="Microsoft.IdentityModel.Web.SessionAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

2ユーザを認証する場合はいつでも、 ClaimsPrincipalを作成し、必要なすべてのクレームを追加してから、 SessionSecurityTokenを作成します。 これは、MVCによって作成されたAccountControllerの LogOnアクションです。

 [HttpPost]
        public ActionResult LogOn(LogOnModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                if (MembershipService.ValidateUser(model.UserName, model.Password))
                {
                    var cp = new ClaimsPrincipal();
                    cp.Identities.Add(new ClaimsIdentity());
                    IClaimsIdentity ci = (cp.Identity as IClaimsIdentity);

                    ci.Claims.Add(new Claim(ClaimTypes.Name, model.UserName));

                    SessionSecurityToken sst = FederatedAuthentication
                        .SessionAuthenticationModule
                        .CreateSessionSecurityToken(cp,
                                                    "MVC Test",
                                                    DateTime.
                                                        UtcNow,
                                                    DateTime.
                                                        UtcNow.
                                                        AddHours
                                                        (1),
                                                    true);


                    FederatedAuthentication.SessionAuthenticationModule.CookieHandler.RequireSsl = false;
                    FederatedAuthentication.SessionAuthenticationModule.AuthenticateSessionSecurityToken(sst, true);


                    //FormsService.SignIn(model.UserName, model.RememberMe);
                    if (!String.IsNullOrEmpty(returnUrl))
                    {
                        return Redirect(returnUrl);
                    }
                    else
                    {
                        return RedirectToAction("Index", "Home");
                    }
                }
                else
                {
                    ModelState.AddModelError("", "The user name or password provided is incorrect.");
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }

私はちょうど必要な行を追加し、他のすべてを同じままにしました。 そこで、いくつかのリファクタリングが必要になるかもしれません。

そこから、あなたのアプリはClaimsPrincipalを受け取るようになりました 。 すべて自動的にWIFによって処理されます。

CookieHandler.RequiresSsl = falseは、それがdevマシンであり、IIS上にデプロイしていないためです。 設定でも定義できます。


WIFはSTSを使用するように設計されています。そうしたくない場合は、基本的に記事ごとにホイールを再作成する必要があります。

ADFSに移行すると、すべてを再コーディングする必要があります。

代わりに、 StarterSTSを見てください 。これは必要なものと同じ種類のaspnetdb認証を実装していますが、WIFが重労働を行うことを許可しています。 その後、ADFSに移行するときは、ADFSに対してFedUtilを実行するだけで、大きなコード変更なしですべて機能します。

(BTW、MVCバージョンがあります - これ以降の実装 - ここで )。





claims-based-identity