0

助けが必要です。役割ベースのメニューを作成しています。LDAPActiveDirectoryを使用してログインしています。

ログインはできますが、ADのグループからロールを取得できません。

ロールプロバイダーを使用しようとしましたが、機能させることができません。私は以下を使用してグループを取得します:

private ArrayList setRoles()
{
    ArrayList rolesList = new ArrayList();
    DirectoryEntry de = new DirectoryEntry("LDAP://**********");
    DirectorySearcher ds = new DirectorySearcher(de);
    ds.PropertiesToLoad.Add("memberOf");
    ds.SearchScope = SearchScope.Subtree;
    ds.Filter = "(sAMAccountName=test)"; // your username

    SearchResult result = ds.FindOne();

    foreach (string g in result.Properties["memberOf"])
        rolesList.Add(g);
    return rolesList;
}

今、私は使用するためにどこかに役割を「設定」する必要があります

User.IsInRole("Admin")

[Authorize role...]
public bla bla bla()

アイデア、リンクなどはありますか?

PD:FORMSAUTHを使用したIM。

4

2 に答える 2

2

これを手動で行う必要はありません。組み込みのロールプロバイダーを使用すると、web.configで設定してタスクを実行する必要があります。

ActiveDirectoryメンバーシッププロバイダー

Windowsトークンロールプロバイダー

更新:これは、ActiveDirectoryメンバーシッププロバイダーでこれを設定することをカバーするStackOverflowに関する質問ですが、それでもフォーム認証を使用します。

ASP.NETMVC-Active Directoryに対してユーザーを認証しますが、ユーザー名とパスワードを入力する必要があります

于 2013-02-27T21:22:43.490 に答える
1

ADの使用経験はありませんが、必要なのは、ロールを持つプリンシパルを使用してHttpContextのUserプロパティを設定することです。

以前に作成したアプローチは、AuthorizationAttributeから継承するカスタム承認属性を作成することでした。

public class AuthorizeActiveDirectoryAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        var user = filterContext.HttpContext.User;

        //Your code to get the list of roles for the current user

        var formsIdentity = filterContext.HttpContext.User.Identity as FormsIdentity;
        filterContext.HttpContext.User = new System.Security.Principal.GenericPrincipal(formsIdentity, rolesList.ToArray());

        base.OnAuthorization(filterContext);
    }

}

次に、それをアクションメソッドに適用します

[AuthorizeActiveDirectory role...]
public bla bla bla()

これにより、次の使用も可能になりますUser.IsInRole("Admin")

于 2013-02-27T21:23:26.430 に答える