Azureb2 c логин не подключается к контроллеру аккаунта - PullRequest
1 голос
/ 29 апреля 2020

У меня есть бритвенное приложение, использующее Azure B2 C, которое я разрабатывал уже некоторое время. Кнопка входа не работала, поэтому я создал новое приложение с помощью мастера по умолчанию, и это приложение работает, если я меняю локальный хост в приложении azure. Я пытаюсь найти разницу между этими двумя приложениями.

Они оба имеют идентичные файлы _LoginPartial.cs html и одинаковые настройки в файле макета для кнопки входа, но те, которые не работают не имеет данных href для вызова учетной записи. Когда я смотрю в отладчике f12, ссылка для входа выглядит так: <a class="nav-link text-dark" href>Sign in</a> Работающее приложение отображает его так: <a class="nav-link text-dark" href="/AzureADB2C/Account/SignIn">Sign in</a>, что, очевидно, намного лучше.

оба работают под управлением Microsoft.AspNetCore. Authentication.AzureADB2 C .UI через пакеты nuget.

у сломанного приложения есть много других вещей, очевидно, что новое нет, telerik, azure storage, sql, entity framework et c но все выглядит одинаково в конфигурации config et c для входа в систему. Я включил запуск et c ниже сломанной версии на случай, если это поможет. Кто-нибудь может определить проблему?

LoginPartial:

@using Microsoft.AspNetCore.Authentication.AzureADB2C.UI
@using Microsoft.Extensions.Options
@inject IOptionsMonitor<AzureADB2COptions> AzureADB2COptions

@{
    var options = AzureADB2COptions.Get(AzureADB2CDefaults.AuthenticationScheme);
}


<ul class="navbar-nav">
@if (User.Identity.IsAuthenticated)
{
        @if (!string.IsNullOrEmpty(options.EditProfilePolicyId))
        {
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="AzureADB2C" asp-controller="Account" asp-action="EditProfile">
                    <span class="text-dark">Hello @User.Identity.Name!</span>
                </a>
            </li>
        }
        else
        {
            <li class="nav-item">
                <span class="navbar-text text-dark">Hello @User.Identity.Name!</span>
            </li>
        }
        <li class="nav-item">
            <a class="nav-link text-dark" asp-area="AzureADB2C" asp-controller="Account" asp-action="SignOut">Sign out</a>
        </li>
}
else
{
        <li class="nav-item">
            <a class="nav-link text-dark" asp-area="AzureADB2C" asp-controller="Account" asp-action="SignIn">Sign in</a>
        </li>
}
</ul>

launchsettings

{
  "iisSettings": {
    "windowsAuthentication": false, 
    "anonymousAuthentication": true, 
    "iisExpress": {
      "applicationUrl": "http://localhost:50209",
      "sslPort": 44370
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "FliveRetry": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

appsettings

{
  "AzureAdB2C": {
    "Instance": "https://xxxx.b2clogin.com/tfp/",
    "ClientId": "xxxx-xx-xx-xx-xx",
    "CallbackPath": "/signin-oidc",
    "Domain": "xxxx.onmicrosoft.com",
    "SignUpSignInPolicyId": "B2C_1_signupsignin",
    "ResetPasswordPolicyId": "B2C_1_resetpassword",
    "EditProfilePolicyId": "B2C_1_editprofile"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "FliveRetryContext": "Server=(localdb)\\mssqllocaldb;Database=xxxx-566cf99c-25d6-42a3-9260-5626bc8829b2;Trusted_Connection=True;MultipleActiveResultSets=true",

  }
}

startup.cs

using System;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.AzureADB2C.UI;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json.Serialization;
using System.Globalization;
using Microsoft.AspNetCore.Localization;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc;
using FliveRetry.Models;
using FliveRetry.Models.PTs;
using FliveRetry.Data;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.HttpsPolicy;


namespace FliveRetry
{
    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)
        {
            services.AddDistributedMemoryCache();

            services.Configure<CookiePolicyOptions>(options =>
            {                
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });


            services.AddSession(options => {
                options.IdleTimeout = TimeSpan.FromMinutes(30);
                options.Cookie.HttpOnly = true;
                options.Cookie.IsEssential = true;
                options.Cookie.Name = ".Flive";
            });
            services.AddMemoryCache();
            services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
                .AddAzureADB2C(options => Configuration.Bind("AzureAdB2C", options));
            services.AddRazorPages().AddNewtonsoftJson
                    (options => {
                        options.SerializerSettings.ContractResolver = new DefaultContractResolver();
                        options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                    });

            services.AddDbContext<FliveRetryContext>(options =>
                    options.UseSqlServer(Configuration.GetConnectionString("xxxxx")));


            services.AddRazorPages();
            services.AddMvc()
                .AddNewtonsoftJson(options =>
                       options.SerializerSettings.ContractResolver =
                          new DefaultContractResolver());
            services.AddMvc();
            services.AddMvc().AddRazorRuntimeCompilation();

            services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN");

            services.AddScoped<IPtNoteRepository, PtNoteRepository>();
            //services.AddSingleton<PtNoteRepository>();

            // Add Kendo UI services to the services container
            services.AddKendo();

        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            var supportedCultures = new[] { new CultureInfo("en-AU") };

            app.UseRequestLocalization(new RequestLocalizationOptions
            {
                DefaultRequestCulture = new RequestCulture("en-AU"),
                SupportedCultures = supportedCultures,
                SupportedUICultures = supportedCultures
            });
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");

                app.UseHsts();
            }
            app.UseHttpsRedirection();
            //app.UseHttpContextItemsMiddleware();

            app.UseRouting();
            app.UseCookiePolicy();
            app.UseAuthentication();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
            });

            app.UseStaticFiles();

            app.UseSession();

        }
    }
}

...