在我们的ASP.NET MVC Core应用程序中,我们使用ASP.NET Idenity来实现用户管理。
问题:如何使用ASP.NET用户界面,而不是直接使用SQL语句等在SQL数据库中创建用户?直接在ASPNETUsers表中创建用户会引起任何问题吗?注意:我们需要ASPNETUsers从用户列表中填充内置身份表。密码可以是任何东西,不需要任何特定角色。
sql-server asp.net-identity asp.net-core asp.net-core-identity
我有一个使用ASP.NET Membership构建的webforms应用程序.我成功迁移到了身份.
我现在想要使用声明授权而不是Roles授权,但旧用户的角色信息已迁移到AspNetUserRoles数据库中的表,但该AspNetUserClaims表为空.迁移后注册的新用户,我可以AspNetUserClaims使用以下代码添加:
IdentityResult result1 = manager.AddClaim(user.Id, new Claim(ClaimTypes.Role, "role"));
Run Code Online (Sandbox Code Playgroud)
但旧用户只在AspNetUserRoles表中注册而不在AspNetUserClaims表中.
在登录时,创建的声明是否也包括AspNetUserRoles表格中的角色信息,还是仅包括表格中的角色信息AspNetUserClaims?
请问User.IsInRole()同时检查AspNetUserRoles表和AspNetUserClaims表?
如何将信息从AspNetUserRoles表格迁移到AspNetUserClaims表格?
我Microsoft.AspNet.Identity.Core 2.2.1在解决方案中使用。我需要将此与另一个应自动添加声明的系统集成。
为了跟踪哪些索偿是手动添加的,哪些索偿是由外部系统创建的,我想在AspNetUserClaims表格中添加另一列:
ExternalSystem varchar(64) null
Run Code Online (Sandbox Code Playgroud)
鉴于我的解决方案中实际上没有Claims类,我该如何使用EF迁移(或在没有必要时不使用)进行此操作?
我试图弄清楚如何使用VerifyHashedPassword方法,这是我到目前为止所得到的.我怎么知道密码是否已经过验证?
public bool VerifyPassword(string pass)
{
PasswordHasher passwordHasher = new PasswordHasher();
HDA = new HWCDA();
HWCE = new HWCEntities();
string userPass = HWCE.AspNetUsers.Where(w => w.UserID == 1).Select(s => s.PasswordHash).FirstOrDefault().ToString();
bool result = false;
passwordHasher.VerifyHashedPassword(userPass, pass);
return false;
}
Run Code Online (Sandbox Code Playgroud) 我开始开发具有.net core 2和Web服务的Web应用程序。
当用户在站点上注册时,他可以选择自己是公司还是简单用户,因此我将数据存储在特定表中,但登录数据存储在AspNetUsers中。
如何使用.net Core中的Identity处理它?
我通过以下方式通过第三方(例如Google)登录用户:
var info = await _signInManager.GetExternalLoginInfoAsync();
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, false);
Run Code Online (Sandbox Code Playgroud)
上面的内容由于存在而应该成功,如何捕获登录用户的userId?userId是位于我的数据库中Users表上的userId,它不会来自第三方登录提供程序。
这可能吗?我现在似乎找不到任何可以让我检索它的函数或对象。我以为可能是从User Object中获取的,但是据我的理解,它来自HttpContext,在此时,该用户将不会具有已登录的用户身份,至少直到刷新页面后才如此。我也想避免仅出于此目的重定向到另一个页面。
注意:我正在使用Dapper,并且在我的项目中没有EF的痕迹。不知道这有多重要。
我如何通过声明对用户进行身份验证,其中包含用户角色?
在Startup.cs:
services.AddAuthorization(options => {
options.AddPolicy("CanEdit", policy => policy.RequireClaim("CanEdit"));
});
Run Code Online (Sandbox Code Playgroud)
在登录控制器中我有:
private async ValueTask<JwtSecurityToken> GetJwtSecurityToken(ApplicationUser user){
//var totalClaims = new List<Claim>();
//var userRoles = await _userManager.GetRolesAsync(user);
//foreach (var role in userRoles) {
// var roleClaims = await _roleManager.GetClaimsAsync(await _roleManager.Roles.SingleAsync(r => r.Name.Equals(role)));
// totalClaims.AddRange(roleClaims);
//}
var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(JwtRegisteredClaimNames.Sub, user.UserName),
new Claim(JwtRegisteredClaimNames.Email, user.Email)
};
return new JwtSecurityToken(
_configuration["Token:Issuer"],
_configuration["Token:Audience"],
//totalClaims,
claims
expires: DateTime.UtcNow.AddHours(12),
signingCredentials: new SigningCredentials(
new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Token:Key"])),
SecurityAlgorithms.HmacSha256)
);
}
Run Code Online (Sandbox Code Playgroud)
方法 …
我正在扩展身份服务器以使用自定义身份服务器实现
public static void UseMongoDbForIdentityServer(this IApplicationBuilder app)
{
//Resolve Repository with ASP .NET Core DI help
var repository = (IRepository)app.ApplicationServices.GetService(typeof(IRepository));
//Resolve ASP .NET Core Identity with DI help
var userManager = (UserManager<ApplicationUser>)app.ApplicationServices.GetService(typeof(UserManager<ApplicationUser>));
// --- Configure Classes to ignore Extra Elements (e.g. _Id) when deserializing ---
ConfigureMongoDriver2IgnoreExtraElements();
var createdNewRepository = false;
...
}
Run Code Online (Sandbox Code Playgroud)
这是我的启动文件的样子
public void ConfigureServices(IServiceCollection services)
{
services.Configure<ConfigurationOptions>(Configuration);
...
services.AddIdentityServer(
options =>
{
options.Events.RaiseSuccessEvents = true;
options.Events.RaiseFailureEvents = true;
options.Events.RaiseErrorEvents = true;
}
)
.AddMongoRepository()
.AddMongoDbForAspIdentity<ApplicationUser, IdentityRole>(Configuration)
.AddClients()
.AddIdentityApiResources() …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用asp.net Identity Core保护我的webAPI。现在,我想动态创建角色,并在我的管理面板中对其进行设置/删除权限。
例如,我有此权限列表:
现在,我想创建不同的角色,并根据需要为他们设置此权限,并将这些角色分配给每个用户。
我在Identity框架的UserManager和RoleManager中进行了搜索,但是无法创建此功能。
有没有实现此功能的方法?我觉得这很有用,但这是关于dotnet的
我正在写MVC Core 2中的第一个自己的应用程序,我无法访问具有用户外键的Estate Entity.我检查了我的数据库,遗产记录正确存储userId:
当我试图context.Estates.FirstOrDefault(m => m.Id == id);获得一个房地产实体时,但是User == null:
当我尝试通过以下方式访问它时:
var user = await _userManager.GetUserAsync(User);
var estate = user.Estates.FirstOrDefault(m => m.Id == id);
Run Code Online (Sandbox Code Playgroud)
我在Estates列表中得到null异常.同样试图以这种方式保存它给了我一个例外:
var user = await _userManager.GetUserAsync(User);
user.Estates.Add(estate);
Run Code Online (Sandbox Code Playgroud)
但是,当我这样输入时,它会在db中正确保存数据:
var user = await _userManager.GetUserAsync(User);
estate.User = user;
context.Add(estate);
Run Code Online (Sandbox Code Playgroud)
我不知道我在这里做错了什么.我在下面提供了我的代码,希望你能给我一些提示/建议.
这就是我如何基于IdentityDbContext构建上下文:
public class ReaContext : IdentityDbContext<User>
{
public DbSet<Estate> Estates { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql("Server=localhost;Port=5432;Database=rea-dev;User Id=postgres;Password=admin;");
}
public ReaContext(DbContextOptions<ReaContext> …Run Code Online (Sandbox Code Playgroud) c# asp.net-identity entity-framework-core .net-core asp.net-core
asp.net-identity ×10
c# ×8
asp.net-core ×5
.net-core ×1
asp.net ×1
asp.net-mvc ×1
claims ×1
dapper ×1
jwt ×1
roles ×1
sql-server ×1