多くのグーグルとASP.NETアプリケーションで混在モードの認証を管理する方法に関するいくつかの解決策を読んだ後、私はまだ私の問題の解決策はありません。ASP.NET MVC 3アプリケーションでWindows認証を拡張する
さまざまなユーザーグループのイントラネットアプリケーションを実装する必要があります。今まで私は実装が非常に簡単だったWindows認証を使用しました。私の問題は、特別なアプリケーション機能のためにユーザーグループを認可する場合に発生します。
[Authorize(Users = "DOMAIN\\USER")]
を使用すると、私はアクティブディレクトリの管理にアクセスできないため、自分のアプリケーションに必要な方法で役割管理を設定することはできません。
私がしたいのは、アクティブなディレクトリ内で定義されているものに加えてカスタムロールとメンバーシップを定義することです(独自のメンバーシッププロバイダを実装するなどの拡張が可能です)。
私の問題のための最良の解決策は何だと思いますか? Windows認証に加えて、フォーム認証で複雑な混合モード認証を実装する必要がありますか?
使用される技術:ASP.NET MVC 3
- MS SQL Server 2008の
- MS VS 2010
- - レイザービューエンジン
- ASP.NET MVCのためのTelerik拡張
- IIS 7 Windows Server 2008の場合
E DIT(dougajmcdonaldのヘルプへの最終的な解決策のおかげで):
カスタムIPrincipal実装を使用するために私を指した後、私はいくつかのソリューションhereとhereを見つけました。一緒にすべてを置く私は次の解決策に来た:
1.Createカスタムプリンシパル実装:「Global.asax.cs」ファイルを拡張してアプリケーションに
public class MyPrincipal: WindowsPrincipal
{
List<string> _roles;
public MyPrincipal(WindowsIdentity identity) : base(identity) {
// fill roles with a sample string just to test if it works
_roles = new List<string>{"someTestRole"};
// TODO: Get roles for the identity out of a custom DB table
}
public override bool IsInRole(string role)
{
if (base.IsInRole(role) || _roles.Contains(role))
{
return true;
}
else
{
return false;
}
}
}
2.Integrate私のカスタムプリンシパルの実装:私のアプリケーションでの承認のための私のカスタムロール3.Use
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
if (Request.IsAuthenticated)
{
WindowsIdentity wi = (WindowsIdentity)HttpContext.Current.User.Identity;
MyPrincipal mp = new MyPrincipal(wi);
HttpContext.Current.User = mp;
}
}
public class HomeController : Controller
{
[Authorize(Roles= "someTestRole")]
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
}
それは動作します!ええ!
私はそれを与えるだろう試してください、高速応答ありがとう:) –
ああ、ありがとうございます!あなたの答えはとても役に立ちました! :-) –
問題はありません。うれしくて助かりました。私は最近非常に似たようなことをしなければならなかった!私の状況では、Windows Active Directoryの役割を使用したくない(管理者がそうした方法を管理したくないため)が、決定した場合にはそれらを使用できるようにするため、IPrincipal私たちのアプリの内部クラスとしてのユーザーアカウントを作成し、それに対するロールを固執するのではなく、物事の側面を説明します。 – dougajmcdonald