Tag: asp.net identity

在ASP.NET WebApi 2中自定义承载令牌JSON结果

我演练了这个官方的ASP.NET教程 ,持票令牌发布如下JSON。 { “access_token”:”boQtj0SCGz2GFGz[…]”, “token_type”:”bearer”, “expires_in”:1209599, “userName”:”Alice”, “.issued”:”Mon, 14 Oct 2013 06:53:32 GMT”, “.expires”:”Mon, 28 Oct 2013 06:53:32 GMT” } 我想添加用户配置文件属性以及上述结果,以减少来自客户端的请求数。 示例如下…… { “access_token”:”boQtj0SCGz2GFGz[…]”, “token_type”:”bearer”, “expires_in”:1209599, “userName”:”Alice”, “.issued”:”Mon, 14 Oct 2013 06:53:32 GMT”, “.expires”:”Mon, 28 Oct 2013 06:53:32 GMT”, “Notifications”:35, “IsEventMember”:true, “Promotion”:324372 } 我使用的oauth提供程序来自默认的ASP.NET模板( ApplicationOAuthProvider.cs ), OAuthOption如下所示。 OAuthOptions = new OAuthAuthorizationServerOptions { TokenEndpointPath = new […]

如何在asp.net mvc身份上设置自定义身份validation?

我需要的?! 我有一个ASP.NET身份系统设置和外部登录运行。 无论出于何种原因,我需要在ASP.NET身份validation后设置自定义身份validation。 我来解释一下怎么样? 假设我有三个页面供用户查看我的应用程序,页面A,B,C。 谁可以查看Page A? 任何匿名用户都可以查看页面A. 谁可以查看页面A和B? 任何使用他/她的电子邮件和密码或外部登录创建帐户的用户。 谁可以查看Page A,B&C? 这是我想要设置自定义身份validation的地方。 任何使用他/她的电子邮件帐户或外部登录名创建帐户并且具有有效序列密钥的用户。 序列号? 我在ASP.NET身份中设置了一个类,如下所示: public class UserDetails : IdentityUser { public virtual MembershipSerial MembershipSerial { get; set; } } public class MembershipSerial { [HiddenInput(DisplayValue=false)] public int Id { get; set; } [HiddenInput(DisplayValue=false)] public string Serial { get; set; } [Required] [Display(Name=”Membership Serial”)] public […]

在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 […]

为什么最终用户必须注销两次?

我试图让IdentityServer4在新的.NET Core 2.1应用程序中运行(它在.NET Core 2.0应用程序中完美运行)。 我尝试过以下方法: 1)下载此项目,即IdentityServer4应用程序: https : //github.com/ghstahl/IdentityServer4-Asp.Net-2.1-Identity-Examples/tree/e0aeeff7e078aa082c8e16029dd2c220acc77d7b 2)使用Identity Server4应用程序下载此项目,即MVC应用程序: https : //github.com/IdentityServer/IdentityServer4.Samples/tree/dev/Quickstarts/6_AspNetIdentity/src/MvcClient 。 3)将两个项目添加到同一解决方案中。 MVC项目使用IdentityServer项目进行身份validation; 授权等 我不得不做出以下改变: 1)更改为IdentityServer应用程序中包含的Startup(AddIdentityServer现在接受参数): services.AddIdentityServer(options => { options.UserInteraction.LoginUrl = “/Identity/Account/Login”; options.UserInteraction.LogoutUrl = “/Identity/Account/Logout”; }) 2)配置IdentityServer应用程序以侦听端口5000并在身份服务器上禁用SSL。 除了注销工具外,一切都按预期开箱即用。 当我在MVC应用程序中单击注销时; 在MVC应用程序中调用以下代码: public async Task Logout() { await HttpContext.SignOutAsync(“Cookies”); await HttpContext.SignOutAsync(“oidc”); } 然后,用户将重定向到IdentityServer应用程序中的Logout.cshtml。 但是,他们必须再次单击注销(在IdentityServer应用程序上)才能实际注销,即他们在MVC应用程序中单击注销(第二点),然后在IdentityServer中注销(第一点)。 为什么最终用户必须注销两次?

‘AspNetUser’类型的属性’Claims’不是导航属性

我正在使用ASP.NET Identity 2.2。 我正在将ASP.NET旧成员身份迁移到新的身份系统。 我按照本文中提到的步骤执行迁移。 我扩展了IdentityUser并添加了更多属性,如下所示: public partial class AspNetUser : IdentityUser { public AspNetUser() { CreateDate = DateTime.Now; IsApproved = false; LastLoginDate = DateTime.Now; LastActivityDate = DateTime.Now; LastPasswordChangedDate = DateTime.Now; LastLockoutDate = DateTime.Parse(“1/1/1754”); FailedPasswordAnswerAttemptWindowStart = DateTime.Parse(“1/1/1754”); FailedPasswordAttemptWindowStart = DateTime.Parse(“1/1/1754”); Discriminator = “AspNetUser”; LastModified = DateTime.Now; this.AspNetUserClaims = new HashSet(); this.AspNetUserLogins = new HashSet(); this.AspNetRoles […]

‘Compare’是’System.ComponentModel.DataAnnotations.CompareAttribute’和’System.Web.Mvc.CompareAttribute’之间的模糊引用。

我的AccountController中有这个错误。 找不到类型或命名空间名称’SelectListItem’(您是否缺少using指令或程序集引用? 显而易见的解决方法是using System.Web.Mvc;添加using System.Web.Mvc; 但是,当我这样做时,我得到4个新错误 在两个不同的行: 找不到类型或命名空间名称’ErrorMessage’(您是否缺少using指令或程序集引用?) 在另外两个不同的行: ‘Compare’是’System.ComponentModel.DataAnnotations.CompareAttribute’和’System.Web.Mvc.CompareAttribute’之间的模糊引用。 为什么会发生这种情况,我该如何解决? public class RegisterViewModel { [DataType(DataType.Password)] [Display(Name = “Confirm password”)] [Compare(“Password”, ErrorMessage = “The password and confirmation password do not match.”)] public string ConfirmPassword { get; set; } public IEnumerable DepotList { get; set; } } ResetPasswordViewModel public class ResetPasswordViewModel { [DataType(DataType.Password)] [Display(Name = “Confirm […]

使用另一个对象扩展ASP.NET MVC 5标识

我目前正在使用Fluent API,在其中找不到有关使用其他对象扩展Identity模型的许多资源。 在这里,我有一个名为ApplicationUser的对象: public class ApplicationUser : IdentityUser { public virtual Staff Staff { get; set; } public int StaffId { get; set; } } 我想将它映射到我当前的Staff对象: public class Staff { public int StaffId { get; set; } public string DisplayName { get; set; } public string FirstName { get; set; } public string LastName { […]

Asp.Net Identity和多种登录机制

我想创建一个尽可能对不同登录机制开放的应用程序。 所以我使用了Asp.Net Identity。 对于(几乎)免费,这个系统给了我: 简单的帐户 OpenID与Facebook,微软,谷歌等 如果您使用其他模板,您还可以使用具有以下3个选项的组织帐户: 云 – 单一组织 云 – 多个组织 内部部署 我的用例显示我需要混合所有这些: 想要简单帐户的用户 想要与OpenID连接的用户 使用Office 365并希望通过我们的应用程序进行SSO的公司 正在使用内部部署Active Directory并希望通过我们的应用程序进行SSO的公司 虽然我可以单独找到每个点的大量文档,但我找不到一个可以描述如何在同一个应用程序中使用它们的文档。 那么,它可能吗? 当然,如果是的话,我们应该如何让它发挥作用? 谢谢,

身份(在数据库创建时)错误指定密钥太长

我在这里有AspNet Identity和MySql的问题,问题是错误,它真的阻止了我,这个错误如下: 指定密钥太长,最大密钥长度为767字节 现在我按照使用MySql和Identity的教程: http://www.asp.net/mvc/tutorials/security/aspnet-identity-using-mysql-storage-with-an-entityframework-mysql-provider 我想说我有进展,因为现在至少我得到了一些在MySQL中生成的表,但是我在这个问题上堆栈,很长一段时间我都试图解决这个问题,但没有成功。 我得到的错误在这部分: public void InitializeDatabase(ApplicationDbContext context) { if (!context.Database.Exists()) { // if database did not exist before – create it context.Database.Create(); } else { // query to check if MigrationHistory table is present in the database var migrationHistoryTableExists = ((IObjectContextAdapter)context).ObjectContext.ExecuteStoreQuery( string.Format( “SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = ‘{0}’ AND […]

Identity UserManager.AddToRole抛出exception

正如标题所说,我正在使用新的C# MVC 5 Identity进行简单的调用: UserManager.AddToRole(User.Id, User.RequestedRole); 我在从ViewModel调用的ViewModel方法中执行此操作 UserManager是在我的ViewModel的Base Class中创建的,如下所示: UserManager = new UserManager(new UserStore(new TMContext())); 当我对AddToRole方法进行上述调用时,我得到了这个Inner Exception (外部的是通用的/无用的): {“A relationship from the ‘Ledger_User’ AssociationSet is in the ‘Deleted’ state. Given multiplicity constraints, a corresponding ‘Ledger_User_Source’ must also in the ‘Deleted’ state.”} 我显然没有删除任何内容,只是添加了一个角色给我的用户。 在我尝试从多个上下文中混合对象之前,我遇到了这个exception……但我在这里没有这样做…请帮助。 编辑:我已经摆脱了模型,以防它干扰并将以下代码添加到我的控制器: public ActionResult UpdateRoles(string id) { if (ModelState.IsValid) { var userManager = […]