标签: asp.net-identity-2

ASP.Net身份登录重定向强制协议(Https)

希望我只是遗漏了一些非常简单/明显的东西 - 为什么,更重要的是,如何在重定向期间维护(或强制)协议Login

为了显示:

请求跟踪

  • 原始协议是 https
  • 人们会认为这应该是类似的"默认" login,但如图所示,重定向(似乎)不能保持它.

我试过的东西:

  • RequireHttps一个可以使用的属性,但是:

    1. 似乎"奇怪",需要2次重定向才能获得"那里"
    2. 在你有负载均衡器和/或在其他地方(不在服务器中)"卸载"SSL的情况下,这将是一个重定向循环(SSL在客户端和前端net/ssl lb之间,以及http你的盒子之间( ES)/应用程序).这实际上是我的生产案例......
  • 我已经设置了IIS URL重写(也称为整个站点的https 规范规则),并且似乎"忽略"(也)(规则不检查"https",否则它会遭受相同的重定向循环).

  • 尝试并且未能在LoginPath(in CookieAuthenticationOptions)中设置绝对URL .. 因为你不能这样做 ......

感谢您的建议或指点......


更新

至于"为什么"

  1. 在你有负载均衡器和/或在其他地方(不在服务器中)"卸载"SSL的情况下,这将是一个 重定向循环(SSL在客户端和前端net/ssl lb之间,以及http你的盒子之间( ES)/应用程序).这实际上是我的生产案例..

进一步的修补使我进入上面,如此(localhost - 我的本地开发框,而不是服务器)请求序列(上述问题表现在生产负载平衡环境中,其中SSL处理是"堆栈" - 例如ARR):

localhost https

  • 事实上该协议得以维持
  • 问题似乎与应用程序和"基础架构"不"匹配" 的情况完全相关.看起来类似于在代码中你会在"负载平衡"/"网络农场"环境中进行操作的情况(比如ARR 在你的ARR中,而不在你的主机中).在这种情况下,该检查将始终返回..Request.IsSecureConnectioncertfalse

那么问题是关于如何解决这个问题的指导呢?


更新2

非常感谢理查德在试图解决这个问题时改变了我的"方向".我原本想找到一种方法:

  • set/tell OWIN/Identity使用安全URL(显式)并"覆盖"它的评估方式LoginPath. …

asp.net-mvc owin asp.net-identity-2

19
推荐指数
1
解决办法
5889
查看次数

如何在成功登录结果后立即在控制器中获取Identity UserID?

我使用Identity v2和MVC 5进行外部登录.

在我的外部登录回调函数中,我将用户登录

var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
Run Code Online (Sandbox Code Playgroud)

然后有一个开关result,我需要在这种success情况下访问用户的ID ,但User.Identity.GetUserId();在这里给我null.

在这种情况下,如何访问用户ID?

claims-based-identity asp.net-mvc-5 asp.net-identity-2

19
推荐指数
2
解决办法
1万
查看次数

自定义ASP.NET Identity 2.0 UserStore - 是否实现了所需的所有接口?

IUserStore<TUser,int>为我的应用程序创建了一个自定义.我已经实现了我需要的接口,

   IUserStore<TUser, int>,
   IUserRoleStore<TUser, int>,
   IUserLockoutStore<TUser, int>,
   IUserPasswordStore<TUser, int>
Run Code Online (Sandbox Code Playgroud)

但是当我打电话的时候

var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
Run Code Online (Sandbox Code Playgroud)

我得到一个例外说法

Store does not implement IUserTwoFactorStore<TUser>.
Run Code Online (Sandbox Code Playgroud)

我在我的应用程序中没有使用双因素身份验证.为什么它希望我实现该接口?是否需要实现所有这些接口,即使我实际上没有使用它们?

c# asp.net asp.net-identity-2

18
推荐指数
3
解决办法
1万
查看次数

ASP.NET Identity 2 UserManager使所有用户都异步

有人可以告诉你是否有办法让所有用户在ASP.NET Identity 2中异步?

UserManager.Users没有任何异步或找到所有异步或somwething这样的

c# asp.net-mvc-5 asp.net-identity-2

18
推荐指数
1
解决办法
2万
查看次数

如何在ASP.Net Identity中使用ActiveDirectoryMembershipProvider?

我正在尝试学习如何使用ASP.Net Identity.我的方案是我必须针对Active Directory进行身份验证.为此我想尝试使用ActiveDirecotoryMembershipProvider.我要做的是 -

  1. 针对Active Directory验证用户/密码.
  2. 检查用户是否存在于我自己的数据库中.

我这样做的方式是我在我的配置中web.config使用ActiveDirectoryMembershipProvider默认会员提供程序.然后我覆盖PasswordSignInAsync我的ApplicationSignInManager类(继承SignInManager)中的方法如下 -

public override Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout)
{
    var adok = Membership.Provider.ValidateUser(userName, password);
    if (adok)
    {
        var user = UserManager.FindByName(userName);
        if (user == null)
            return Task.FromResult<SignInStatus>(SignInStatus.Failure);
        else
        {
            base.SignInAsync(user, isPersistent, shouldLockout);
            return Task.FromResult<SignInStatus>(SignInStatus.Success);
        }
    }
    else
        return Task.FromResult<SignInStatus>(SignInStatus.Failure);
}
Run Code Online (Sandbox Code Playgroud)

这似乎有效.但我认为这不是正确的做法.有谁能建议任何更好的方法来实现这一目标?

UPDATE

以下是我如何称呼上述内容

var result = await SignInManager.PasswordSignInAsync(username, password, isPersistent: false, shouldLockout: false);
switch (result)
{ …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-membership asp.net-identity asp.net-identity-2

18
推荐指数
2
解决办法
5679
查看次数

使用JWT的.Net Core 2.0 Web API - 添加标识会破坏JWT身份验证

(编辑 - 找到正确的解决方案!见下文)

好的 - 这是我第一次尝试使用.Net Core 2.0和身份验证,虽然我过去曾使用过Web API 2.0,并且在过去几年中对各种MVC和Webforms ASP项目进行了相当广泛的工作.

我正在尝试使用.Net Core创建一个仅限Web API的项目.这将形成多租户应用程序的后端以生成一些报告,因此我需要能够对用户进行身份验证.通常的方法是使用JWT - 首先验证用户生成令牌,然后将其传递给客户端以在每个API请求上使用.将使用EF Core存储和检索数据.

我按照这篇文章找到了这个设置的基本方法,我设法让它工作正常 - 我有一个接受用户名/密码的控制器并返回一个令牌(如果有效),并且一些授权策略设置基于索赔.

我需要的下一件事是实际管理用户/密码/等.我以为我只是使用.Net核心身份,因为我会有很多现成的代码来担心用户/角色,密码等.我使用的是自定义User类和UserRole派生自标准IdentityUserIdentityRole类的类,但我现在已经恢复到标准的那个.

我遇到的问题是我无法弄清楚如何添加身份并注册所有各种服务(rolemanager,usermanager等)而不会破坏身份验证 - 基本上只要我将此行添加到我的Startup.ConfigureServices类中:

services.AddIdentity<IdentityUser, IdentityRole>()
    .AddEntityFrameworkStores<MyContext>();
Run Code Online (Sandbox Code Playgroud)

这一切都出错了,当我收到请求时,我再也看不到任何索赔,所以所有的政策都锁定了,你无法得到任何东西.

如果我没有那些行,那么我最终会遇到与UserManager,RoleManager,UserStore等相关的错误.所有这些都没有注册DI.

那么......如何(如果可能的话)我可以注册身份并正确地将其连接到上下文,但是避免/删除对实际授权机制的任何更改?

我已经在网上看了很多,但是自从.Net Core 1.x以来已经发生了很多变化,所以很多教程等都不再有效了.

我不打算让这个API应用程序拥有任何前端代码,因此我现在不需要对表单或任何内容进行任何cookie身份验证.

编辑
确定,我现在发现在此代码中设置Startup.ConfigureServices()方法中的JWT身份验证:

 services.AddAuthentication(
            JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                 >>breakpoint>>>   options.TokenValidationParameters =
                        new TokenValidationParameters
                        {
                            ValidateIssuer = true,
                            ValidateAudience = true,
                            ValidateLifetime = true,
                            ValidateIssuerSigningKey = true,

                            ValidIssuer = "Blah.Blah.Bearer",
                            ValidAudience = "Blah.Blah.Bearer",
                            IssuerSigningKey …
Run Code Online (Sandbox Code Playgroud)

jwt asp.net-identity-2 asp.net-core-webapi

18
推荐指数
1
解决办法
5454
查看次数

为什么asp.net Identity用户id是字符串?

我想在asp.net web api应用程序中使用System.Guid类型作为我所有表的id.但我也使用Asp.net Identity,它使用字符串类型的id(也用于存储guid).所以我想知道为什么它默认使用字符串 id而不是System.Guid?什么是通过所有应用程序使用的更好的选择 - Guid id或string -guid id?在使用字符串的情况下 - 在代码或数据库中生成新id的最正确和最可靠的方法是什么?

c# asp.net database-design uniqueidentifier asp.net-identity-2

17
推荐指数
2
解决办法
5518
查看次数

Owin记得浏览器究竟做了什么?

在标准的ASP.Net MVC Identity 2.0 Owin实现中的几个地方,你会看到rememberBrowser,如:

await signInManager.SignInAsync(user, isPersistent: isPersistent, rememberBrowser: false);
Run Code Online (Sandbox Code Playgroud)

如果你将rememberBrowser设置为true,我注意到我可以杀死浏览器,杀死IIS Express,删除浏览器登录的用户,甚至重新启动我的机器,浏览器仍被视为已登录.不太好,考虑到被删除的用户被视为授权/登录将导致在该[Authorize]属性后面的代码中出现各种问题,这些问题需要有效的用户使用.

那么rememberBrowser究竟做了什么,是否有人冒险将cookiesBrowser伪造成绕过OWIN登录?似乎重点[Authorize]是保证没有人,但登录用户访问给定的控制器动作,并且rememberBrowser似乎是该保证中的漏洞.

奖金问题:有没有办法禁用rememberBrowser,这样即使伪造的cookie确实进来,它也会被拒绝?

asp.net-mvc authorize owin asp.net-identity-2

17
推荐指数
2
解决办法
3108
查看次数

如何使用身份2中的电子邮件登录?

在MVC5 Identity 2中,SignInManager.PasswordSignInAsync获取登录用户名.

var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
Run Code Online (Sandbox Code Playgroud)

但我的用户名和电子邮件不一样.但我想通过电子邮件地址登录.所以我该怎么做?谢谢

asp.net-mvc identity asp.net-mvc-5 asp.net-identity asp.net-identity-2

16
推荐指数
1
解决办法
1万
查看次数

我应该将我的应用程序上下文与用于标识的ApplicationDbContext分开吗?

在Visual Studio 2013中,在创建ASP.NET项目时,它会生成一个文件IdentityModels.cs,其中包含一个ApplicationDbContext继承自的类,该类IdentityDbContext<ApplicationUser>最终继承自DbContext.

我应该仅为帐户相关实体保留此上下文,并为应用程序中的所有其他实体创建单独的上下文,还是应该将其混合使用.

任何安全问题或理由不在一个上下文中包含我的整个应用程序的所有实体?

c# asp.net entity-framework dbcontext asp.net-identity-2

16
推荐指数
2
解决办法
2485
查看次数