основной идентификатор asp.net и сервер идентификации - PullRequest
0 голосов
/ 19 октября 2018

Я следую в этом пошаговом руководстве по интеграции идентификатора ядра asp.net с IdentityServer, но преодолел несколько препятствий.

Где я обновляю метод ConfigureServices, если я следуюруководство и использование

services.AddIdentity<IdentityUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

Я больше не могу получить доступ ни к одной из функций, связанных с учетной записью.Маршрутизация для ссылки на регистр изменяется с

~/Identity/Account/Register

на

~/?area=Identity&page=%2FAccount%2FRegister

, что нарушает все функции, связанные с учетной записью

Если я оставлю ее на

services.AddDefaultIdentity<IdentityUser>()
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

Тогда маршрутизация все еще работает, я могу ввести свои учетные данные через страницу входа в систему, и вход в систему успешен, но

SignInManager.IsSignedIn(User)

возвращает false, поэтому я предполагаю, что что-то здесь в корне нарушено.

Я добавил identityserver в мои ConfigureServices:

    services.AddIdentityServer()
                    .AddDeveloperSigningCredential()
                    .AddInMemoryPersistedGrants()
.AddInMemoryIdentityResources(Config.IdentityResources.GetIdentityResources())
                    .AddInMemoryApiResources(Config.APIResources.GetApiResources())
                    .AddInMemoryClients(Config.Clients.GetClients())
                    .AddAspNetIdentity<IdentityUser>();

Есть идеи, что нужно изменить - я предполагаю, что это что-то в последней версии ядра asp.net, вызвавшей это?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

понял это в конце концов.Похоже, странная ошибка, поскольку MSFT мигрирует на страницы Razor.Все, что мне нужно было сделать, это добавить пользовательский интерфейс Scaffolding , и он только начал работать

0 голосов
/ 19 октября 2018

В Net Core 2.1 Microsoft удалила AccountController и переместила всю логику Identity на страницы Razor (альтернативы в настоящее время нет), что затрудняет следование логике (напоминает мне классику ASP или PHP).Быстрый старт в документации полностью основан на том, что AccountController остается на месте (уже не так), и думаю, что это должно быть переписано как страницы Razor, прежде чем что-то будет работать.Однако в этом нет особого смысла, хотя механизм аутентификации не работает.

Я использовал следующие файлы Startup.cs, чтобы продемонстрировать, что аутентификация больше не работает в IdentityServer4 при добавлении в новый проект Net Core 2.1.,Он должен работать, но демонстрирует следующее поведение при доступе к методу контроллера, защищенного [Авторизоваться], и вызову, представленному на странице входа.

1) При вводе неверных учетных данных отображается текст «Недопустимая попытка входа»

2) При вводе правильных учетных данных проверка подлинности не выполняется, и это видно по отсутствию ссылки на выход из системы или отладке.и наблюдая, что User.isAuthenticated имеет значение false

В файл Startup.cs можно внести несколько изменений, чтобы показать, что аутентификация работает, когда IdentityServer отключен и включена стандартная аутентификация.Просто закомментируйте блок, начинающийся с «services.AddIdentityServer (options =>»), чтобы отключить IdentityServer. Далее закомментируйте «useIdentityServer ()» и раскомментируйте «useAuthentication ()», и все аутентификации снова будут работать правильно.

  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.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.Lax;
        });

        // Add authentication options
        services.AddAuthentication(options =>
        {
            options.DefaultScheme = "Cookies";
            options.DefaultChallengeScheme = "oidc";
        })
        .AddCookie("Cookies")
        .AddOpenIdConnect("oidc", options =>
        {
            options.SignInScheme = "Cookies";
            options.Authority = "http://localhost:5000";
            options.RequireHttpsMetadata = false;
            options.ClientId = "mvc";
            options.ClientSecret = "secret";
            options.ResponseType = "code id_token";
            options.SaveTokens = true;
            options.GetClaimsFromUserInfoEndpoint = true;
            options.Scope.Add("api1");
            options.Scope.Add("offline_access");

        });

        // Identity Context
        services.AddDbContext<ApplicationDbContext>(options =>
        {
            options.UseSqlServer(Configuration["IdentityConnection"],
                                sqlOptions => sqlOptions.MigrationsAssembly(typeof(Startup).GetTypeInfo().
                                Assembly.GetName().Name));
        },
            ServiceLifetime.Scoped
        );

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

        // Add application services.
        services.AddTransient<Microsoft.AspNetCore.Identity.UI.Services.IEmailSender, EmailSender>();

        services.AddMvc();

        // configure identity server with in-memory stores, keys, clients and scopes
        services.AddIdentityServer(options =>
        {
            options.UserInteraction.LoginUrl = "/Identity/Account/Login";
            options.UserInteraction.LogoutUrl = "/Identity/Account/Logout";
        })
        .AddDeveloperSigningCredential()
            .AddInMemoryPersistedGrants()
            .AddInMemoryIdentityResources(Config.GetIdentityResources())
            .AddInMemoryApiResources(Config.GetApiResources())
            .AddInMemoryClients(Config.GetClients())
            .AddAspNetIdentity<ApplicationUser>();

        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(); // not needed, since UseIdentityServer adds the authentication middleware
        app.UseIdentityServer();

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

Я не уверен, как аутентификация работает в IdentityServer4, так как не следили за тем, как она будет работать в Net Core 2.1. Кто-нибудь прошел дальше меня и запустил этот сервер?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...