프로덕션 환경에서 ASP.NET ID를 아직 사용하지는 않지만 (몇 달 안에) 테스트 프로젝트를 만들어 내부 사용자의 활성 디렉토리에 대해 인증합니다. 이 작업을 수행하려면 고유 한 구현을 롤업해야합니다. 여기
내가 다른 방법에 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
클래스를 확장해야합니다. SQL Server를 사용하는 경우에도 내 데이터베이스 스키마는 기본 ASP.NET ID 구현과 많이 다르므로 내 자신의 모델을 사용합니다. 적어도 구현해야하는 것은 IUser
입니다 (실제로 이것은 IdentityUser
이 구현 한 것입니다). 여기에 그것을 구현하는 방법은 다음과 같습니다.
public partial class User : IUser<Guid> {
}
Entity Framework에서 사용하는 모든 속성과 정보가 들어있는 같은 이름의 부분 클래스가 있습니다.
답변 해 주셔서 감사합니다. 나는 완전히 이해할 지 모르겠다. 내 사용자는 이미 내 DB에 저장되어 있지만 원래 Active Directory에서 가져 왔지만 내 사용자 모델로 복사됩니다. 내 자신의 역할을 만들고 싶습니다 (그들은 AD에서 정의되지 않았습니다). 나는 Admin, Developper, NormalUser와 같은 것들을 가지고 Role 모델을 만든다. 이런 상황에서 위에 붙여 넣은 코드가 효과가 있습니까? 도움에 다시 한번 감사드립니다. –
물론, 내가 만들고있는 요점은 기본 데이터 저장소가 원하는대로 될 수 있다는 것입니다. 올바른 데이터를 처리하기 위해 인터페이스를 구현하면됩니다. –