Questions tagged «asp.net-identity»

ASP.NET身份系统旨在替代以前的ASP.NET成员资格和简单成员资格系统。

13
配置Microsoft.AspNet.Identity以允许将电子邮件地址用作用户名
我正在创建一个新的应用程序,并开始使用EF6-rc1,Microsoft.AspNet.Identity.Core 1.0.0-rc1,Microsoft.AspNet.Identity.EntityFramework 1.0.0-rc1,Microsoft.AspNet.Identity .Owin 1.0.0-rc1等,以及昨天发布的RTM,今天晚上我通过NuGet将它们更新为RTM。 到目前为止,除了对我所做的工作进行了几处代码更改之外,一切似乎都进展顺利,直到我尝试为该应用程序创建本地用户帐户为止。 我一直在使用作为用户名格式的电子邮件地址,该版本与候选发布版本一起使用时效果很好,但是现在当使用用户名的电子邮件地址创建用户时,它将引发以下验证错误: 用户名xxxxx@xxxx.com无效,只能包含字母或数字。 我花了最后一个小时左右的时间来寻找有关配置选项的解决方案或文档,但无济于事。 有没有一种方法可以配置它以允许用户名使用电子邮件地址?

3
在MVC5中使用异步的优势是什么?
之间有什么区别? public ActionResult Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { IdentityResult result = IdentityManager.Authentication.CheckPasswordAndSignIn(AuthenticationManager, model.UserName, model.Password, model.RememberMe); if (result.Success) { return Redirect("~/home"); } else { AddErrors(result); } } return View(model); } 和: [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { IdentityResult result = …

8
在ApiController动作中获取当前用户,而不将userID作为参数传递
我们如何在安全的ApiController动作中获取当前用户,而不将userName或userId作为参数传递? 我们认为这是可用的,因为我们处于安全的行动之内。采取安全措施意味着用户已经通过身份验证,并且该请求具有其承载令牌。假定WebApi已授权用户,则可能有一种内置的方式来访问userId,而不必将其作为操作参数传递。


9
带有EF数据库优先MVC5的ASP.NET身份
是否可以将新的Asp.net标识与Database First和EDMX一起使用?还是仅使用代码? 这是我所做的: 1)我创建了一个新的MVC5项目,并让新的Identity在我的数据库中创建了新的User和Roles表。 2)然后,我打开了Database First EDMX文件,并将其拖到新的Identity Users表中,因为我还有其他与此表相关的表。 3)保存EDMX后,数据库优先POCO生成器将自动创建一个User类。但是,UserManager和RoleManager希望从新的Identity命名空间(Microsoft.AspNet.Identity.IUser)继承一个User类,因此使用POCO User类将不起作用。 我想可能的解决方案是编辑POCO生成类以使我的User类继承自IUser? 还是ASP.NET Identity仅与Code First Design兼容? ++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++ 更新:按照安德斯·阿贝尔(Anders Abel)的建议,这就是我所做的。它的工作,但我想知道是否有一个更优雅的解决方案。 1)通过在与我的自动生成的实体相同的名称空间中创建局部类,扩展了实体User类。 namespace MVC5.DBFirst.Entity { public partial class AspNetUser : IdentityUser { } } 2)我将DataContext更改为从IdentityDBContext继承,而不是从DBContext继承。请注意,每次更新EDMX并重新生成DBContext和Entity类时,都必须将其设置为此。 public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser> //DbContext 3)在自动生成的User实体类中,您必须将override关键字添加到以下4个字段中,或将这些字段注释掉,因为它们是从IdentityUser继承的(步骤1)。请注意,每次更新EDMX并重新生成DBContext和Entity类时,都必须将其设置为此。 override public string Id { get; set; } override …

11
在Asp.net Identity MVC 5中创建角色
关于使用新的Asp.net身份安全框架的文档很少。 我拼凑了可以尝试创建的新角色并向其中添加用户的方法。我尝试了以下操作:在ASP.NET Identity中添加角色 看起来好像已经从该博客中获取了信息:使用asp.net身份构建一个简单的待办事项应用程序并将用户与待办事项相关联 我已将代码添加到只要模型更改就运行的数据库初始化程序。该RoleExists函数失败,出现以下错误: System.InvalidOperationException 发生在mscorlib.dll中。实体类型IdentityRole不是当前上下文模型的一部分。 protected override void Seed (MyContext context) { var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context)); // Create Admin Role string roleName = "Admins"; IdentityResult roleResult; // Check to see if Role Exists, if not create it if (!RoleManager.RoleExists(roleName)) { …

4
在ASP.NET Identity 2.0中获取当前用户ID
我刚刚切换到使用Identity Framework的新2.0版本。在1.0中,我可以通过使用获取用户对象manager.FindByIdAsync(User.Identity.GetUserId())。该GetUserId()方法似乎在2.0中不存在。 现在,我能确定的是使用manager.FindByEmailAsync(User.Identity.Name)哪些表引用了用户表中的用户名字段。在我的应用程序中,此设置与电子邮件字段相同。 当有人需要更新电子邮件时,我可以看到这会导致问题。是否有一种方法可以基于Identity 2.0 Framework中不变的值(例如id字段)来获取当前登录的用户对象?

7
ASP.NET Core身份-获取当前用户
要获得MVC5中当前登录的用户,我们要做的就是: using Microsoft.AspNet.Identity; [Authorize] public IHttpActionResult DoSomething() { string currentUserId = User.Identity.GetUserId(); } 现在,我认为使用ASP.NET Core应该可以,但是会引发错误。 using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Http; private readonly UserManager<ApplicationUser> _userManager; [HttpPost] [Authorize] public async Task<IActionResult> StartSession() { var curUser = await _userManager.GetUserAsync(HttpContext.User); } 有任何想法吗? 编辑: Gerardo的响应已步入正轨,但要获得用户的实际“ Id”,这似乎可行: ClaimsPrincipal currentUser = this.User; var currentUserID = currentUser.FindFirst(ClaimTypes.NameIdentifier).Value;

4
OWIN安全性-如何实施OAuth2刷新令牌
我正在使用Visual Studio 2013随附的Web Api 2模板,该模板具有一些OWIN中间件来进行用户身份验证等。 在OAuthAuthorizationServerOptionsI中,我注意到OAuth2服务器已设置为发放在14天内到期的令牌 OAuthOptions = new OAuthAuthorizationServerOptions { TokenEndpointPath = new PathString("/api/token"), Provider = new ApplicationOAuthProvider(PublicClientId,UserManagerFactory) , AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"), AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), AllowInsecureHttp = true }; 这不适合我的最新项目。我想分发短暂的bearer_tokens,可以使用refresh_token 我已经进行了大量谷歌搜索,找不到任何有用的信息。 这就是我设法取得的成就。我现在已经达到“现在就做WTF”这一点。 我写了一个根据类的属性RefreshTokenProvider实现的:IAuthenticationTokenProviderRefreshTokenProviderOAuthAuthorizationServerOptions public class SimpleRefreshTokenProvider : IAuthenticationTokenProvider { private static ConcurrentDictionary<string, AuthenticationTicket> _refreshTokens = new ConcurrentDictionary<string, AuthenticationTicket>(); …

1
如何在ASP.NET MVC 5中实现自定义身份验证
我正在开发一个ASP.NET MVC 5应用程序。我有一个现有的数据库,从中可以创建ADO.NET实体数据模型。我在该数据库中有一个表,其中包含“用户名”和“密码”列,我想用它们在Webapp中实现身份验证和授权;由于客户的要求,我无法创建任何其他数据库,表或列,也无法使用标准的身份验证。我不需要管理注册,密码更改或其他操作:只需使用密码和用户名登录即可。我怎样才能做到这一点?


4
如何在ASP.NET 5 MVC 6(vNext)中定义身份的密码规则?
默认情况下,ASP.NET 5中提供的默认身份提供程序具有非常严格的密码规则,要求使用小写字母,大写字母,非字母数字字符和数字。我正在寻找一种更改提供商密码要求的方法。 以前在ASP.NET 4中,可以通过Web.config XML文件配置提供程序,如先前所回答。但是,ASP.NET 5使用基于新代码的配置模式,目前尚不清楚如何配置身份。 如何更改应用程序的密码要求?

1
使用OWIN身份从多个API客户端注册Web API 2外部登录
我想要以下架构(在此示例中,我组成了产品名称): 在一台服务器上运行的Web API 2应用程序 http://api.prettypictures.com 在另一台服务器上运行的MVC 5客户端应用程序 http://www.webpics.com 我希望www.webpics.com客户端应用程序使用Pretty Pictures API来: 使用用户名和密码注册新帐户 在Facebook / Google / Twitter / Microsoft注册新帐户 登录 检索图片 以上所有工作,除了在Facebook,Google等处注册外部帐户外。 我无法计算出正确的流程来从API的单独客户端用户创建外部帐户。 我研究了身份验证流程中可用的大多数文档,例如: 我已经阅读了关于OWIN中新Identity模式的几乎所有内容。 我已经检查了Visual Studio 2013中的SPA模板。该模板演示了如何执行我所需的大部分操作,但仅当客户端和API位于同一主机上时才执行。如果我希望多个客户端访问我的API并能够让用户通过Google等进行注册,则无法正常工作,据我所知,OWIN身份验证流程中断了。 到目前为止的流程如下: 用户浏览到www.webpics.com/Login www.webpics.com调用api.prettypictures.com/Account/ExternalLogins(用RETURNURL一套回去在回调www.webpics.com),并显示最终链接到用户 用户点击“ Google” 浏览器使用提供者的名称等重定向到api.prettypictures.com/Account/ExternalLogin。 API的ExternalLogin操作实例化了对google.com的挑战 浏览器被重定向到google.com 用户输入其用户名和密码(如果尚未登录google.com) google.com现在提供安全检查:“ api.prettypictures.com”希望访问您的电子邮件地址,姓名,妻子,子女等。可以吗? 用户单击“是”,并使用Google设置的cookie带回到api.prettypictures.com/Account/ExternalLogin。 这就是我卡住的地方。接下来应该发生的是,应该以某种方式通知客户端应用程序用户已成功通过google.com进行身份验证,并获得一次性使用访问代码,以稍后交换访问令牌。客户端应用应有机会(如有必要)提示用户输入用户名,以与其google.com登录名相关联。 我不知道该怎么做。 实际上,在这一点上,浏览器最终在Google回调后位于api.prettypictures.com/Account/ExternalLogin端点。该API已针对Google登录,但客户端不知道如何处理。我应该将该Cookie传送回www.webpics.com吗? 在SPA应用程序中,这是通过AJAX完成的,并且google.com将返回令牌作为URL片段,并且由于它们都位于一个域中,因此效果很好。但是,这与拥有多个客户端可以完全使用的“ API”的许多观点不符。 救命!

12
更新用户数据-ASP.NET身份
我向ApplicationUser类添加了自定义字段, 还创建了一种表单,用户可以通过该表单输入/编辑字段。 但是由于某种原因,我无法更新数据库中的字段。 [HttpPost] [ActionName("Edit")] [ValidateAntiForgeryToken] public async Task<ActionResult> Manage(EditProfileViewModel model) { if (ModelState.IsValid) { // Get the current application user var user = User.Identity.GetApplicationUser(); // Update the details user.Name = new Name { First = model.FirstName, Last = model.LastName, Nickname = model.NickName }; user.Birthday = model.Birthdate; // This is …

3
无法从apicontroller中的OwinContext获取UserManager
我正在跟踪一个Microsoft示例,以使用Identity 2.0.0实现电子邮件验证。 我被困在这部分 public ApplicationUserManager UserManager { get { return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); } private set { _userManager = value; } } 这可以在ApiController中工作,controller但HttpContext不包含任何GetOwinContext方法。 所以我尝试了,HttpContext.Current.GetOwinContext()但是该方法GetUserManager不存在。 我找不到UserManager在Startup.Auth.cs中构建I的方法 // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864 public void ConfigureAuth(IAppBuilder app) { //Configure the db context, user manager and role manager to …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.