繁体   English   中英

Net Core Identity 2.1身份验证无法正常访问受保护的端点

Net Core Identity 2.1 Authentication Not Working Correctly Accessing Protected Endpoints

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

要描述的问题是打算使用某个应用程序对另一个应用程序进行身份验证,并且“登录”页面未成功进行身份验证,然后输入正确的凭据。

多个应用程序中的端点受[授权]保护,以确保执行质询并显示登录页面。 为了进行测试,请使用具有默认功能的全新Net Core应用程序。 一个应用程序在本地主机上启动运行,另一个应用程序启动并登录,以在成功认证后立即重定向到第一个应用程序,并显示该应用程序的“登录”页面。 这可以。

如果错误输入了登录凭据,则可能会出现“无效的登录尝试”。 但是,当应用正确的凭据时,根本不会进行身份验证,并且仍然显示登录页面而无需重定向,并且键入的凭据也会消失。 这似乎不正确。 还尝试使用Cookie身份验证进行添加,但无法显示Cookie,而JWT却不知道将令牌发送到何处。 我该如何工作? 理想情况下,我希望通过第一个身份验证,因此登录页面不会出现在重定向中,但这可能要困难得多。 下面显示了所有应用程序中的Startup.cs代码,以检查是否明显缺少某些内容。

    public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        // Authentication/Authorisation (Identity) Context
        services.AddDbContext<ApplicationDbContext>(options =>
        {
            options.UseSqlServer(Configuration["WCX_Identity_Connection"],
                                sqlOptions => sqlOptions.MigrationsAssembly(typeof(Startup).GetTypeInfo().
                                Assembly.GetName().Name));
        },
            ServiceLifetime.Scoped
        );

        // Configure default Identity implementation
        services.AddDefaultIdentity<ApplicationUser>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultUI()
            .AddDefaultTokenProviders()
            .AddEntityFrameworkStores<ApplicationDbContext>();

        // Register no-op EmailSender used by account confirmation and password reset during development
        // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=532713
        services.AddSingleton<Microsoft.AspNetCore.Identity.UI.Services.IEmailSender, EmailSender>();

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();

        app.UseAuthentication();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

下面显示的是第一个应用程序的Home Controller代码,使用为应用程序设置的身份表可以完美地工作。 其他应用程序也指向同一数据库。

 public class HomeController : Controller
{
    [Authorize]
    public IActionResult Index()
    {
        // The home page is redirected dependent on currently logged in user details stored in the Identity tables.
        if (User.Identity.IsAuthenticated)
        {
            using (var context = new WCX_IdentityContext())
            {
                // Use Identity and EF core to retrieve logged on user details
                var identity = (ClaimsIdentity)User.Identity;

                // The AspNetUsers Identity table contains the basic identity details
                var user = context.AspNetUsers.SingleOrDefault(x => x.UserName == identity.Name);

                // The AspNetApplicationUsers table contains the application ids the logged on user is authorised to use
                var appUserIds = context.AspNetApplicationUsers.Where(x => x.UserId == user.Id).Select(y => y.ApplicationId);

                List<ApplicationLink> applicationLinks = new List<ApplicationLink>();
                foreach (var appUserId in appUserIds)
                {
                    // The AspNetApplications table contains the application name and redirect url 
                    var app = context.AspNetApplications.SingleOrDefault(x => x.Id == appUserId);
                    if (app != null)
                    {
                        applicationLinks.Add(new ApplicationLink
                        {
                            ApplicationName = app.ApplicationName,
                            AppUrl = app.AppUrl
                        });
                    }
                }

                if (applicationLinks.Count == 0)
                {
                    // Redirect to display no applications available
                    return RedirectToAction("Unavailable");
                }
                else if (applicationLinks.Count == 1)
                {
                    // Redirect to application url
                    return Redirect(applicationLinks[0].AppUrl);
                }
                else
                {
                    // Show hyperlinks on home page
                    return View(applicationLinks);
                }
            }
        }

        return View();
    }

受保护的应用

Microsoft身份登录页面

超链接到受保护的应用程序

问题暂未有回复.您可以查看右边的相关问题.
4 带有 LDAP 身份验证的 Asp.Net Core 2.1 身份

我已经设置了我的应用程序,它使用身份在站点上进行角色访问。 我正在从使用自定义声明转换器的 Windows 身份验证切换到使用 LDAP,以便用户将拥有一个登录页面,这与 Chrome 中弹出的“类似 javascript 警报”的 Windows 身份验证不同。 问题是,即使我在 LDAP 中 ...

5 使用 ASP.NET Core 2.1 / 3+ 身份验证身份验证 cookie

在 ASP.NET Core 2(有或没有Identity )中使用 Cookie 身份验证时,可能会发生用户的电子邮件或名称更改,甚至帐户在 cookie 的生命周期内被删除的情况。 这就是文档指出应该验证 cookie 的原因。 文档中的示例注释为 此处描述的方法在每个请求上都会触发。 这可 ...

7 请求 jquery Post 以使用 Net Core 2.1 身份验证发出注销

我有一个新的小应用程序,它使用 Net Core 2.1 身份验证,并且一直在运行 razor 视图中的预定义行,用于请求使用表单注销: 我正在尝试使用 Jquery 重写该帖子: 但是得到以下错误返回给我。 上面的两个代码片段不是在做同样的事情吗? 顶部正在工作。 ...

8 ASP.NET MVC身份与ASP.Net核心2.1身份(它们之间的交叉身份验证)

我有两个不同的项目,一个是针对Web应用程序,该应用程序首先在asp.net MVC中使用EF代码,另一个是针对移动应用程序API,其在Asp.Net Core 2.1中首先使用EF代码,两个都共享同一个数据库,都在使用Identity认证。 问题是如果有人在Web应用程序中注册并尝试使用身份 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM