Я пытался сделать систему, аналогичную той, которая была в ядре .net 4.5, безуспешно.Я все еще пытаюсь полностью понять ядро, но ключевые фигуры все еще будут там.Моя конечная цель - вернуть принципала с пользовательскими утверждениями и прослужить ему весь сеанс или память в течение 15 минут, прежде чем он будет перепроверен.Вот мои проблемы, которые я, кажется, не могу преодолеть, и поиск в Интернете безуспешен.
- Претензия запускается каждый раз, когда я выполняю действие, но не была уверена, был ли способпереместите это в событие уровня сеанса, если оно существует.
- Имеющийся у меня ClaimsPrincipal дает только sid для групп AD вместо имени, и я не нашел способа запросить AD для этого в качестве опции Novellне работает, я использую Windows Auth и не имею доступа к паролю, который пользователь использует для входа в свою учетную запись.
- В прошлом я использовал расширенные классы ClaimsAuthenticationManager / ClaimsAuthorizationManager при создании экземпляра FederatedAuthentication в Global.ascx в .net, но, похоже, не могу перевести это на ядро.
Пример моеготекущий код:
public class ClaimsTransformer : IClaimsTransformation
{
public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
ClaimsIdentity cidentity = (ClaimsIdentity)principal.Identity;
//IQueryable<Claim> claims = cidentity.Claims.AsQueryable();
List<Claim> claims = new List<Claim>();
cidentity.AddClaim(new Claim("TestClaimAdd", "Test Worked"));
cidentity.AddClaim(new Claim(ApplicationClaimTypes.UserID, Guid.NewGuid().ToString()));
cidentity.AddClaim(new Claim(ClaimTypes.Name, principal.Identity.Name));
claims.AddRange(cidentity.Claims);
//foreach (var claim in claims)
//{
// var name = claim.Subject.Name;
//}
//cidentity.AddClaim(new Claim("TestClaimAdd","Test Worked"));
var identity = new ClaimsIdentity(claims, "TEST", ClaimTypes.Name, ApplicationClaimTypes.ApplicationRole);
var myPrincipal = new ApplicationClaimsPrincipal(identity);
//principal.AddIdentity(identity);
return Task.FromResult((ClaimsPrincipal)myPrincipal);
}
}
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddScoped<IClaimsTransformation, ClaimsTransformer>();
}
Любая помощь будет высоко ценится.