Sar*_*iri 4 claims-based-identity asp.net-identity .net-core asp.net-core
在 .NET Core 2.2 中成功登录后,HttpContext.User.Claims 和 IHttpContextAccessor 均返回空值这里是我的启动服务,
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")
,b=>b.MigrationsAssembly("AdaptiveBizapp")));
services.AddDbContext<Project_Cost_Management_SystemContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("Project_Cost_Management_SystemContext")
, b => b.MigrationsAssembly("AdaptiveBizapp")));
services.AddDefaultIdentity<ApplicationUser>()
.AddRoles<ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.ConfigureApplicationCookie(options => {
options.LoginPath = "/Account/login";
options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
});
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
// Set a short timeout for easy testing.
options.IdleTimeout = TimeSpan.FromMinutes(30);
options.Cookie.HttpOnly = true;
// Make the session cookie essential
options.Cookie.IsEssential = true;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Run Code Online (Sandbox Code Playgroud)
和我的配置部分,
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseSession();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "area",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
});
Run Code Online (Sandbox Code Playgroud)
我使用基于身份和角色的授权。登录成功后,在 HomeController 中,当我读取用户声明或 NameIdentifier 为空时。但是当我在同一个 LoginController 中读取时,它在 ClaimPrincipal 中具有价值,
public async override Task<ClaimsPrincipal> CreateAsync(ApplicationUser user)
{
var principal =await base.CreateAsync(user);
// Add your claims here
((ClaimsIdentity)principal.Identity).
AddClaims(new[] {
new System.Security.Claims.Claim(ClaimTypes.NameIdentifier,
user.UserName.ToString())
});
return principal;
}
Run Code Online (Sandbox Code Playgroud)
小智 6
找了一整天,终于搞清楚了。这些声明将在下次调用服务器时进行处理。希望这篇文章可以帮助其他人。如果您遵循微软的文档,那么您就很好,但只是不要尝试在设置声明时的同一调用中获取声明。再打一次电话,他们就会补充水分。
| 归档时间: |
|
| 查看次数: |
9589 次 |
| 最近记录: |