Tag: asp.net core identity

基于ASP.NET核心自定义策略的授权 – 不清楚

好的,ASP.NET核心中基于自定义策略的授权。 我有点理解这个新的身份框架的想法,但仍然没有100%清楚你可以用这个来实现。 假设我们在HomeController中有一个名为List的Action。 此操作将查询并显示数据库中的产品列表。 必须访问此列表的用户必须是Marketing部门的一部分。 因此,在我们的政策中,我们检查用户是否有一个名为Division的声明,其值是Marketing。 如果是,那么他将被允许查看列表,否则不会。 我们可以像这样装饰我们的动作: [Authorize(Policy = “ProductsAccess”)] public IActionResult List() { //do query and return the products view model return View(); } 一切都很好。 它会很完美。 场景1:如果我想在产品级别添加策略,并且根据策略,用户将只看到其部门的产品,该怎么办? 所以营销人员会看到他的产品,研发人员会看到他的等等。 我怎样才能做到这一点? 是否可以通过政策完成? 如果有,怎么样? 场景2:在现场级访问怎么样? 让我们说也许我想隐藏某些字段? 示例:所有产品都有某些必须对Managers可见且对其他用户隐藏的列? 可以使用自定义策略完成吗? 如果有,怎么样?

ASN.NET Core 2.0 Facebook身份validationExternalLoginSignInAsync失败(IsNotAllowed)

我正在使用Ddentity在ASP.NET Core 2.0中创建一个新的应用程序。 我根据文档启用了Facebook身份validation。 现在正在运行的流程如下: 当新用户从Facebook进行身份validation时,应用程序会要求发送电子邮件以便用于该应用程序 当用户提供电子邮件时,在我的dbo.AspNetUsers表中创建用户并使用用户提供的电子邮件,并在我的dbo.AspNetUserLogins中创建一个新行,并引用提供者,providerKey和userId。 那时我可以看到在我的数据库中所有行都有正确的数据。 现在,当用户注销并尝试在某个时候再次使用facebook登录时,应用程序会检查用户是否可以通过以下方式使用提供者凭据登录: // Sign in the user with this external login provider if the user already has a login. var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor: true); 此时,我的结果是NotAllowed(属性IsNotAllowed = true),它要求用户输入新的电子邮件(就像新用户的原始流程一样)。 当然,电子邮件已经注册,用户无法创建新帐户,因为他不应该这样做。 我的ExternalLoginCallback控制器是项目的默认实现。 [HttpGet] [AllowAnonymous] public async Task ExternalLoginCallback(string returnUrl = null, string remoteError = null) { […]

如何使用UserManager在IdentityUser上加载导航属性

我已经扩展了IdentityUser以包含用户地址的导航属性,但是当使用UserManager.FindByEmailAsync获取用户时,不会填充导航属性。 ASP.NET Identity Core是否有某种方法可以填充Entity Framework的Include()等导航属性,还是必须手动执行? 我已经设置了这样的导航属性: public class MyUser : IdentityUser { public int? AddressId { get; set; } [ForeignKey(nameof(AddressId))] public virtual Address Address { get; set; } } public class Address { [Key] public int Id { get; set; } public string Street { get; set; } public string Town { get; set; } […]

ASP.NET Core 2.0 JWTvalidation因“用户授权失败:(null)”错误而失败

我正在使用ASP.NET Core 2.0应用程序(Web API)作为JWT发行者来生成移动应用程序的令牌消费品。 不幸的是,这个令牌无法由一个控制器validation,而另一个控制器可以validation(在同一个asp.net核心2.0应用程序中使用相同的validation设置)。 所以我有一个有效且可以解码的令牌,具有所有必需的声明和时间戳。 但是一个端点接受它,而另一个端点给我401错误和调试输出: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService:信息:用户授权失败:(null)。 [40m[32minfo[39m[22m[49m: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Authorization failed for user: (null). Microsoft.AspNetCore.Authorization.DefaultAuthorizationService:Information: Authorization failed for user: (null). [40m[32minfo[39m[22m[49m: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[3] Authorization failed for the request at filter ‘Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter’. Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Authorization failed for the request at filter ‘Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter’. Microsoft.AspNetCore.Mvc.ChallengeResult:Information: Executing ChallengeResult with authentication schemes (). [40m[32minfo[39m[22m[49m: Microsoft.AspNetCore.Mvc.ChallengeResult[1] Executing ChallengeResult with authentication schemes (). […]

尝试激活’AuthController’时无法解析类型’Microsoft.AspNetCore.Identity.UserManager`的服务

我在登录控制器中收到此错误。 InvalidOperationException:尝试激活’Automobile.Server.Controllers.AuthController’时,无法解析类型’Microsoft.AspNetCore.Identity.UserManager`1 [Automobile.Models.Account]’的服务。 这是Auth Controller构造函数: private SignInManager _signManager; private UserManager _userManager; public AuthController(UserManager userManager, SignInManager signManager) { this._userManager = userManager; this._signManager = signManager; } 这是在startup.cs中的ConfigureServices: public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddApplicationInsightsTelemetry(Configuration); services.Configure(Configuration.GetSection(“AppSettings”)); //var provider = HttpContext.ApplicationServices; //var someService = provider.GetService(typeof(ISomeService)); services.AddDbContext(options => options .UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”), b => b.MigrationsAssembly(“Automobile.Server”) )); services.AddIdentity(options => { […]

如何在ASP.NET Core Identity中注销其他用户

如何在ASP.NET Core Identity中注销另一个用户(不是当前记录的用户)。 我知道SignOutAsync()有一个SignOutAsync()方法,但似乎没有覆盖接受用户作为参数。 我正在寻找类似的东西: signInManager.SignOutAsync(user);

为什么ASP.NET Core Identity 2.0授权filter导致我获得404?

我有一个控制器,我想只限制一个特定的角色,让我们说admin 。 在使用admin角色设置用户之后,我可以使用IsInRoleAsync方法(返回true)validation他是否在该角色上。 当使用[Authorize(Roles = “admin”)]设置属性时,我得到的是同一个用户的404。 我正在使用持有者令牌(我不认为这是相关的,但无论如何),这就是我尝试调试的方法: 控制器没有[Authorize] :返回资源。 [好] 带[Authorize]控制器: 仅当我使用Authentication: Bearer [access token] 时才返回资源Authentication: Bearer [access token] [确定] 带[Authorize(Roles = “admin”)]控制器:即使在拥有角色集的用户登录后,我也得到404 [NOK] 我不知道我是否缺少一些配置,但这是我的ConfigureServices: public void ConfigureServices(IServiceCollection services) { services.AddMvc(); // Add framework services. services.AddDbContext(options => { options.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”)); options.UseOpenIddict(); }); services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); services.AddOpenIddict(opt => { opt.AddEntityFrameworkCoreStores(); opt.AddMvcBinders(); opt.EnableTokenEndpoint(“/api/token”); opt.AllowPasswordFlow(); opt.DisableHttpsRequirement(); //for dev only! […]

使用ASP .NET Core Identity和EntityFrameworkCore注册新用户时出现InvalidOperationException

我正在关注使用Identity的文档 ,我正在尝试注册一个新用户(执行注册操作),但它失败并出现以下错误: InvalidOperationException:无法为“ApplicationUser”创建DbSet,因为此类型未包含在上下文的模型中。 启动: services.AddIdentity(options => { //password options options.Password.RequireDigit = false; // … }) 我使用的是标准的ApplicationUser: public class ApplicationUser : IdentityUser { } 在AccountController中注册操作: public async Task Register(RegisterViewModel viewModel) { if (ModelState.IsValid) { var user = new ApplicationUser { UserName = viewModel.UserName, Email = viewModel.Email }; var result = await _userManager.CreateAsync(user, viewModel.Password); //<– Exception happens […]

如何自定义实现asp.net身份的UpdateAsync方法?

我正在做自定义asp.net身份而不使用asp.net内置表。我已成功创建用户实现自定义CreateAsync 现在我想用新的加密密码更新用户,所以我没有得到如何提供UpdateAsync method自定义实现。 这是我的表: 用户 : Id,Name,EmailId,Password,Statistics,Salary 型号 : public class UserModel : IUser { public string Id { get; set; } public string Name { get; set; } public string EmailId { get; set; } public string Password { get; set; } public int Salary { get; set; } } 我实现IUserstore的自定义类: public class UserStore […]

.NET Core 2.1 Identity为所有用户提供相关角色

我正在尝试为用户管理管理页面提取所有Identity用户及其相关角色。 我认为这将相当容易,但显然不是。 我尝试过以下解决方案: https : //stackoverflow.com/a/43562544/5392786但到目前为止还没有解决。 这是我到目前为止: ApplicationUser: public class ApplicationUser : IdentityUser { public List<IdentityUserRole> Roles { get; set; } } 的DbContext public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext(DbContextOptions options) : base(options) { } } 启动标识代码 services.AddIdentity(options => options.Stores.MaxLengthForKeys = 128) .AddEntityFrameworkStores() .AddDefaultTokenProviders(); 我要显示列表的Razor页面: public class IndexModel : PageModel { private readonly UserManager […]