【发布时间】:2019-02-08 18:12:32
【问题描述】:
我一直在尝试制作一个类似于我在 .net 4.5 中的核心系统,但没有成功。我仍在尝试完全掌握核心,但认为关键项目仍然存在。我的最终目标是让一个主体返回自定义声明,并让它在整个会话或内存中持续大约 15 分钟,然后再重新检查。这是我似乎无法克服的问题,并且在互联网上搜索没有成功。
- claimtransform 每次我执行操作时都会运行,但不确定是否有办法将其移至会话级事件(如果存在)。
- 我的 ClaimsPrincipal 只为我提供了 AD 组的 sid 而不是名称,我还没有找到查询 AD 的方法,因为 Novell 选项不起作用我使用的是 Windows 身份验证并且无法访问密码用户正在使用那里的广告帐户登录。
- 过去,我在 .net 的 Global.ascx 中实例化 FederatedAuthentication 时使用了 ClaimsAuthenticationManager/ClaimsAuthorizationManager 的扩展类,但似乎无法将其转换为核心。
我当前的代码示例:
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>();
}
任何帮助将不胜感激。
【问题讨论】:
标签: asp.net-core