Tag: asp.net identity 2

重用WEB API OData控制器的现有ASP.NET-MVC 5 Identity 2授权,以便轻松登录其他应用程序?

我有完整的ASP.NET-MVC5应用程序,我通过WEB API 2 OData控制器进行了扩展。 比如我有: public class PersonController : ODataController 和需要授权的MVC控制器 [Authorize] public class PersonController : Controller 两个控制器都在我的DbSets中使用ApplicationDbContext 我不想通过WEB API控制器向世界上的每个人提供有关人员的数据。 我已经在我的MVC应用程序中拥有User , Moderator和Admin角色。 我可以以某种方式使用已经存在的授权模块(Identity 2.x),当有人试图从Person WEB API Controller获取数据时要求登录。 例如: http://localhost:17697/odata/Person?$expand=ReceivedCalls 直接问题 : 如果我做: [Authorize] public class PersonController : ODataController { 然后当我去链接时: http://localhost:17697/odata/Person 我被重定向到登录页面。 但是这个登录页面适用于人类。 如何使客户端应用程序轻松登录。

用户通过“记住我”退出

我似乎很难理解Identity 2.0和cookies的工作方式。 ASP.NET MVC 5。 我想要的是:如果用户登录并且他选中了“记住我”复选框,我不希望他永远退出..但会发生的是:用户在一定时间后退出。 如果用户在时间跨度之前关闭浏览器,则“记住我”function将起作用。 (当他重新打开网站时,他仍然登录。) 这是我登录的代码: public async Task Login(LoginViewModel model, string returnUrl) { if (!ModelState.IsValid) { return View(model); } // Require the user to have confirmed their email before they can log on. var user = await UserManager.FindByNameAsync(model.Email); if (user != null) { if (!await UserManager.IsEmailConfirmedAsync(user.Id)) { await SendEmailConfirmationTokenAsync(user.Id); ModelState.AddModelError(“”, “Gelieve […]

UserManager继续抛出System.ArgumentNullException

我试图在AspNetUsers从nvarchar到int的标准Id 。 我已经设法让那一方工作了。 但是我的问题是当我尝试登录时,我不断从UserManager类中收到错误。 我的代码如下: public class UserManager : UserManager { public UserManager(IUserStore store) : base(store) { } 在我登录的页面上 if (IsValid) { // Validate the user password var manager = Context.GetOwinContext().GetUserManager(); var user = manager.Find(UserName.Text, Password.Text); //This line throws the error if (user != null) { IdentityHelper.SignIn(manager, user, isPersistent: false); Response.Redirect(“~/Home.aspx”); } else { FailureText.Text […]

ASP身份2 + Web API令牌身份validation – 持久声明未加载

我在ASP.NET Web API Token Auth中遇到了一些问题。 基本上我创建了一个具有一些声明的用户(值存储在AspNetUserClaim表中)但是当创建用户身份时,这些声明不会从数据库中提取。 我的设置细分如下。 用户类:具有GenerateUserIdentityAsync方法(非常标准)和一些自定义属性: public class LibraryUser : IdentityUser{ //Add Custom Properties Here public string Company { get; set; } public string DisplayName { get; set; } public async Task GenerateUserIdentityAsync(UserManager manager, string authenticationType) { // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType var userIdentity = await manager.CreateIdentityAsync(this, […]

ASP.Net Identity 2管理用户

寻找一种方法来实现一个简单的系统管理员页面来管理身份2用户。 我想简单地选择所有用户和角色的列表,然后将列表绑定到可编辑的控件,如GridView。 使用常规数据集很容易,但是用户管理器类和方法的机制正在妨碍一些本来相当容易的事情。 看起来像一个常见的任务,但到处搜索,但没有找到有用的样本。 仅供参考,此解决方案仅适用于一小部分内部用户,不适用于Facebook等自行注册或外部validation。

多站点ASP.NET身份2的中间件

背景 : 在一个项目中,我获得了创建中间件的工作,该中间件使用身份2进行身份validation,取代了他们拥有的简单成员项目。 我将角色和用户扩展到我的喜欢,一切都很好。 现在我需要制作这个中间件,多站点准备好了。 要求 : 每个站点都被视为不同的应用程序; 每个用户名都是唯一的,如果他拥有权限,则可以登录多站点; 每个站点都有自己的唯一角色,并且它们可以与其他站点具有相同的名称(不是描述名称)(使ID成为角色表中唯一的唯一属性)。 每个角色都有自己的一组属性,这些属性可以并且可能具有不同的值,来自其他站点中具有相同名称的其他角色。 想法 : 我在思考如何解决这个问题的方式是: 由于角色具有ID并且它应该是唯一的,因此具有相同名称的不同角色应该没有问题(因此我必须从角色名称中删除唯一性)。 每个角色都属于一个应用程序,因此角色和应用程序(或站点,如果您想使其更简单)之间的多对一连接。 就是这样,那应该是非常简单的。 问题 : 我一直在尝试扩展Identity,以便我可以解决问题,但似乎我无法用identityDbContext覆盖角色名称的唯一性,因此,我的ApplicationDbContext现在inheritance了DbContext。 问题 : 我知道身份非常灵活,我可以从另一个角度来解决这个问题,我现在没有想到,因为我会有很多变化来改变usermanager,userstore,rolestore和rolemanager。 这是一个“我正在以正确的方式解决这个问题”的问题,因为到目前为止,我还没有找到任何关于在身份2中解决这种方法的问题。 感谢您的任何帮助!

无法从AspNetUsers表中检索inheritance的自定义属性值

我使用ASP.NET Identity 2.0并创建从ApplicationUserinheritance的两个不同的用户实体,如在ASP.NET MVC 5中使用entity framework6实现inheritance时发布的那样,但是在到达时我无法访问这些自定义属性及其值(StudentNumber和Profession) ApplicationUser(Name,Surname)中定义的自定义属性。 想法? 这是我试图用来检索值Name , Surname , StudentNumber和Profession : 控制器: public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager) { UserManager = userManager; SignInManager = signInManager; } private ApplicationUserManager _userManager; public ApplicationUserManager UserManager { get { return _userManager ?? HttpContext.GetOwinContext() .GetUserManager(); } private set { _userManager = value; } } [AllowAnonymous] public ActionResult ListAccount(JQueryDataTableParamModel […]

在ASP.Net Identity 2.0上包含属性UserManager.Users.ToListAsync和UserManager.FindByIdAsync

我正在尝试实现Asp.Net Identity 2.0。 到目前为止,我已经在这个博客的帮助下做得很好。 但是我的道路略有不同。 我希望一些数据不是User对象的一部分,而是一个新创建的Customer对象。 我希望将身份validation和授权数据与我的业务数据分开。 所以在我的例子中,我通过添加一个客户属性修改了ApplicationUser类: public Customer Customer { get; set; } Customer类看起来像这样: public class Customer { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Insertion { get; set; } public Gender Gender { get; set; } […]

向Identity users表添加软删除

我已将删除的列添加到我的Users表中,但显然注册Identity框架提供的新用户方法仍然会在数据库中看到这些用户,有没有办法告诉它忽略某个列? 注册 // this needs to ignore any DeletedAt where not null var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { … } 在登录 // this needs to ignore any DeletedAt where not null result = await SignInManager.PasswordSignInAsync( user.UserName, model.Password, model.RememberMe, shouldLockout: true ); …还有任何其他外部登录事件需要告知列。

在Identity Framework的方法中,HttpContext.Current为null

我正在使用ASP.NET MVC 5和Identity Framework。 当我在ApplicationDbContext()上调用UserManager.UpdateAsync(…)时,我的事件处理程序将运行SaveChanges。 这里我使用HttpContext.Current用于不同的目的(日志记录和审计)所以我必须说当前用户。 但是整个方法在一个工作线程中运行,这里HttpContext.Current为null。 UserManager的“同步”方法最大的问题只是异步版本的包装,因此调用是序列化的,但方法(和事件处理程序)仍然在不同的工作线程中运行。 请注意,此问题与async / await上下文无关。 在await之后的控制器中(或调用’sync’版本)我已经返回正确的HttpContext,即使控制器的方法在另一个线程中继续。 没关系。 所以问题出在异步工作者中,它将同时在“同步”和异步版本中运行。 我想我理解这种现象(但我对假’同步’方法版本不满意,真正的同步方法不会出现这个问题。)我只是不知道如何处理/解决它。 [btw:将UserManager的操作实现为简单的纯同步版本,然后用异步multithreading包装器包装它们不是更自然吗? 如果我们继续这种异步方式而不考虑我们将很快发明异步赋值运算符。 它花了我几十个小时(只是这个问题),全球成本高达数十亿美元,我相信在很多情况下,它的回报低于它的价格。 额外奖励:我们所说的UserManager的影响非常小,但相同的原则和问题可以应用任何开箱即用的库(黑盒子),作者没有实现同步版本,或者不关心控制器线程的上下文。 那么EF,它不是那么边缘……那么DI容器实例化基础设施如“请求范围”或“会话范围”呢? 如果在没有HttpContext.Current的线程中进行解析,他们肯定会行为不端。 最近我刷新了SendGrid NuGet,并且(作为一个突破性的变化)Deliver()方法消失了,现在只有DeliverAsync()存在… 我想有一个安全可靠的方法,如何访问此worker中的HttpContext以进行日志记录和审计。 示例代码,控制器’sync’版本: [AcceptVerbs(HttpVerbs.Post)] public virtual ActionResult Edit(ApplicationUser user) { // validation etc // Update() seems to be only a poor wrapper around the async version, still uses a worker thread. var result […]