Клиент MVC не перенаправляет на интерфейс входа IdentityServer4

Я пробираюсь через быстрые запуски IdentityServer4 и у меня возникают проблемы с запуском неявного быстрого запуска. Я начал все с нуля и без проблем следовал инструкциям (clientcredentials, resourceownerpassword и т. Д.), Пока не попытался заставить клиента MVC получить доступ к методу контроллера с атрибутом Authorize, используя поток Implicit. Весь мой код, кажется, совпадает с этим в примерах GitHub (с соответствующими изменениями порта и тому подобное), но когда клиент MVC обращается к контроллеру, он получает ошибку 401, которая уместна.... но он не отображает интерфейс быстрого запуска MVC. (устанавливается в проект IdentityServer с использованием предоставленного файла powerscript), чтобы я мог войти в систему. Кажется, что-то мне не хватает. Я предоставил регистрацию, вывод и, как я понимаю, соответствующий код ниже. Как подключить неудачную попытку MVC к интерфейсу входа?

Буду признателен за любую информацию, которую вы можете предоставить!

Порт 50488 является основным приложением удостоверения.net. Порт 61022 является клиентским приложением MVC.

Консоль ведения журнала для IdentityServer во время попытки клиента MVC: журнал IdentityServer4

Окно вывода Visual Studio:

Microsoft.AspNetCore.Hosting.Internal.WebHost: Информация: запрос на запуск HTTP / 1.1 GET http://localhost:61022/Home/Contact
Microsoft.AspNetCore.Authorization.DefaultAuthorizationService: Информация: авторизация не выполнена для пользователя: (пусто).

Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker: Предупреждение. Авторизация не выполнена для запроса в фильтре "Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter".

Microsoft.AspNetCore.Mvc.ChallengeResult: Информация: Выполнение ChallengeResult со схемами аутентификации ().

'dotnet.exe' (CoreCLR: clrhost): загружен 'C:\Users\keith.hurley.nuget\packages\System.Threading.Tasks.Extensions\4.3.0\lib\netstandard1.0\System.Threading.Tasks.Extensions.dll. Пропущены символы загрузки. Модуль оптимизирован и включена опция отладчика "Просто мой код".

'dotnet.exe' (CoreCLR: clrhost): загружен 'C:\Users\keith.hurley.nuget\packages\System.Globalization.Extensions\4.3.0\runtimes\win\lib\netstandard1.3\System.Globalization.Extensions.dll. Пропущены символы загрузки. Модуль оптимизирован и включена опция отладчика "Просто мой код".

'dotnet.exe' (CoreCLR: clrhost): загружен 'C:\Users\keith.hurley.nuget\packages\Microsoft.AspNetCore.Http.Extensions\1.1.0\lib\netstandard1.3\Microsoft.AspNetCore.Http.Extensions.dll. Пропущены символы загрузки. Модуль оптимизирован и включена опция отладчика "Просто мой код".

'dotnet.exe' (CoreCLR: clrhost): загружен 'C:\Users\keith.hurley.nuget\packages\Microsoft.AspNetCore.Diagnostics.Abstractions\1.1.0\lib\netstandard1.0\Microsoft.AspNetCore.Diagnostics.Abstractions.dll. Пропущены символы загрузки. Модуль оптимизирован и включена опция отладчика "Просто мой код".

'dotnet.exe' (CoreCLR: clrhost): загружен 'C:\Users\keith.hurley.nuget\packages\System.Security.Principal\4.3.0\lib\netstandard1.0\System.Security.Principal.dll', Пропущены символы загрузки. Модуль оптимизирован и включена опция отладчика "Просто мой код".

'dotnet.exe' (CoreCLR: clrhost): загружен 'C:\Users\keith.hurley.nuget\packages\System.Text.RegularExpressions\4.3.0\lib\netstandard1.6\System.Text.RegularExpressions.dll', Пропущены символы загрузки. Модуль оптимизирован и включена опция отладчика "Просто мой код".

'dotnet.exe' (CoreCLR: clrhost): загружен 'C:\Users\keith.hurley.nuget\packages\System.Runtime.CompilerServices.Unsafe\4.3.0\lib\netstandard1.0\System.Runtime.CompilerServices.Unsafe.dll. Модуль был построен без символов.

'dotnet.exe' (CoreCLR: clrhost): загружен 'C:\Users\keith.hurley.nuget\packages\System.IO.Compression\4.3.0\runtimes\win\lib\netstandard1.3\System.IO.Compression.dll. Пропущены символы загрузки. Модуль оптимизирован и включена опция отладчика "Просто мой код".

'dotnet.exe' (CoreCLR: clrhost): загружен 'C:\Users\keith.hurley.nuget\packages\System.Security.Cryptography.X509Certificates\4.3.0\runtimes\win\lib\netstandard1.6\System.Security.Cryptography.X509Certificates.dll. Пропущены символы загрузки. Модуль оптимизирован и включена опция отладчика "Просто мой код".

'dotnet.exe' (CoreCLR: clrhost): загружен 'C:\Users\keith.hurley.nuget\packages\System.Runtime.CompilerServices.Unsafe\4.3.0\lib\netstandard1.0\System.Runtime.CompilerServices.Unsafe.dll. Модуль был построен без символов.

Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectMiddleware: Информация: AuthenticationScheme: oidc был оспорен.

Microsoft.AspNetCore.Hosting.Internal.WebHost: Информация: запрос завершен в 1121.3286ms 401

IdentityServer Startup.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System.IdentityModel.Tokens.Jwt;

namespace Ident4
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddIdentityServer()
                .AddTemporarySigningCredential()
                .AddInMemoryPersistedGrants()
                .AddInMemoryScopes(Config.GetScopes())
                .AddInMemoryClients(Config.GetClients())
                .AddInMemoryUsers(Config.GetUsers());

        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseIdentityServer();

            app.UseStaticFiles();
            app.UseMvcWithDefaultRoute();

            //app.Run(async (context) =>
            //{
            //    await context.Response.WriteAsync("Hello World!");
            //});
        }
    }
}

Клиент IdentityServer

new Client
                {
                    ClientId="mvc",
                    ClientName="MVC Client",
                    AllowedGrantTypes=GrantTypes.Implicit,
                    RedirectUris= {"http://localhost:61022/signin-oidc"},
                    PostLogoutRedirectUris = { "http://localhost:61022" },
                    AllowedScopes=
                    {
                        StandardScopes.OpenId.Name,
                        StandardScopes.Profile.Name,
                        "api1"
                    }
                }

MVC_client Startup.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;

namespace MVC_client
{
    public class Startup
    {
        public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build();
        }

        public IConfigurationRoot Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationScheme = "cookies"
            });

            app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
            {
                AuthenticationScheme = "oidc",
                SignInScheme = "cookies",
                Authority = "http://localhost:50488/",
                RequireHttpsMetadata = false,
                ClientId = "mvc",
                SaveTokens = true
            });


            app.UseStaticFiles();
            app.UseMvcWithDefaultRoute();

        }
    }
}

1 ответ

Решение

Я столкнулся с той же проблемой. Для меня это была проблема с пакетом Nuget.

Во время начальной загрузки основного проекта aspnet он добавляет пакеты "Microsoft.AspNetCore.Authentication.Cookies" и "Microsoft.AspNetCore.Authentication.OpenIdConnect" с версией "1.1.0".

Изменение версии пакета обратно на "1.0.*" Работает для меня.

Другие вопросы по тегам