私はまだ運用環境で 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 で使用されるすべてのプロパティと情報を含む、同じ名前の別の部分クラスがあります。