2

MVC5 でロール管理を処理するためのアイデンティティの方法に関する多くのブログ投稿を読みましたが、それらのほとんどは登録システムなどを統合しているようです。ロールを簡単に使用できるかどうかを知りたいです。

Active Directory からユーザーを取得し、カスタム User モデル クラスに格納する既存の MVC5 プロジェクトがあります。ID ロール管理をそのようなプロジェクトと統合することは可能ですか?

私は ASP.Net MVC にかなり慣れていませんが、これまでのところ、いくつかの頭痛の種になっています。IdentityUser を拡張するモデル クラスを使用する必要がありますか? その場合、引き続き Active Directory ユーザーを使用して、GUID、電子メール、名前などをその新しいクラスにマップし、ロールを使用してアプリケーション ビューへのアクセスを制限できますか?

4

1 に答える 1

1

私はまだ運用環境で ASP.NET Identity を使用していませんが (おそらく数か月後)、内部ユーザーの Active Directory に対して認証を行うテスト プロジェクトをまとめています。ただし、これを機能させるには、独自の実装を展開する必要があります。

さまざまな方法で Active Directory にアクセスする方法を示すいくつかの短縮サンプルを次に示します。

役割

public async Task<IList<string>> GetRolesAsync(User user) {
    List<string> roles = new List<string>();

    //Active Directory Roles
    if (user.Email.Contains("@mycompany")) {
        var directory = new CompanyDirectory();

        var adGroups = directory.GetGroupsByUser(user.Email);

        if (adGroups != null && adGroups.Count > 0) {
            roles.AddRange(adGroups);
        }
    }

    //SQL Server Roles
    var dbRoles = await _context.Users
        .Where(u => u.UserName == user.UserName)
        .SelectMany(u => u.Roles)
        .Select(r => r.Name)
        .ToListAsync();

    roles.AddRange(dbRoles);

    return roles;
}

認証

public override async Task<User> FindAsync(string userName, string password) {
    var identityUser = await base.FindByNameAsync(userName);

    if (identityUser != null) {
        if (userName.EndsWith("@mycompany.net")) {
            var directory = new CompanyDirectory();
            var isValidated = directory.ValidateUser(userName, password);

            if (isValidated) {
                return identityUser;
            }
        } else {
            //SQL Server Auth
        }
    }

    return null;
}

クラスを拡張する必要はありません。IdentityUserこれは実際には Entity Framework 実装で使用される既定のクラスであるためです (SQL Server を使用していますが、データベース スキーマは既定の ASP.NET Identity 実装とは大きく異なるため、独自のモデルを使用します)。 )。少なくとも実装する必要があるのはIUser(これは実際に実装するものですIdentityUser)。これが私がそれを実装する方法です:

public partial class User : IUser<Guid> {

}

Entity Framework で使用されるすべてのプロパティと情報を含む、同じ名前の別の部分クラスがあります。

于 2014-04-04T19:09:51.317 に答える