I am creating a Windows Authentication app but the roles sit within the custom database and not on the AD so I created a custom ClaimsPrincipal to override the User.IsInRole() function that usually looks at the AD for roles.
However, when running the application it still seems to be using the original code and not my CustomClaimsPrincipal. I get the error "The trust relationship between the primary domain and the trusted domain failed".
In ASP.Net MVC 5 I used a Custom RoleProvider which is essentially what I am trying to replicate here.
CustomClaimsPrincipal.cs
public class CustomClaimsPrincipal : ClaimsPrincipal { private readonly ApplicationDbContext _context; public CustomClaimsPrincipal(ApplicationDbContext context) { _context = context; } public override bool IsInRole(string role) { var currentUser = ClaimsPrincipal.Current.Identity.Name; IdentityUser user = _context.Users.FirstOrDefault(u => u.UserName.Equals(currentUser, StringComparison.CurrentCultureIgnoreCase)); var roles = from ur in _context.UserRoles.Where(p => p.UserId == user.Id) from r in _context.Roles where ur.RoleId == r.Id select r.Name; if (user != null) return roles.Any(r => r.Equals(role, StringComparison.CurrentCultureIgnoreCase)); else return false; } } Startup.cs
services.AddIdentity<ApplicationUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>(); services.AddScoped<ClaimsPrincipal,CustomClaimsPrincipal>(); Not sure if the above code in Startup.cs is the correct way to override the ClaimsPrincipal as I'm new to the .Net Core framework.
ClaimsPrincipalis not injected as a service so what you're doing won't work. It's set onHttpContext.Userby the authentication provider.