Удостоверение ASP.Net с MVC 5 Web API 2 и Net Core Api - PullRequest
0 голосов
/ 22 апреля 2019

Это можно было спросить / ответить раньше, поэтому извиняюсь, если это так - я просто не могу заставить его работать.

У меня есть очень старое приложение ASP.NET MVC с большим количеством контроллеров Web API 2 в проекте. Проект использует идентичность asp.net. Я дошел до того, что просто не имеет никакого смысла сохранять проект API как часть внешнего интерфейса и нужно его разделить. Я могу разделить его на другой проект Web API 2, и он будет работать, но я хочу, чтобы он работал на ядре .net, чтобы начать идти в ногу со временем (и многими другими причинами).

Проблема: текущий проект использует идентификацию asp.net, и у меня есть ключ машины в конфигурации. Перемещение этого ключа машины не работает в ядре .net, поэтому я добавил DataProtection в старый проект, чтобы сохранить машинные ключи в AzureStorage. Теперь это работает в старом приложении, и в моем тестовом проекте .net core web api я также добавил его, но продолжаю получать 401 из .net core api.

Насколько я понимаю, маркер-носитель, сгенерированный в старом проекте, можно использовать в новом проекте, однако я продолжаю получать ответ 401. Когда я использую тот же токен-носитель в проекте mvc web api 2, я получаю ожидаемый ответ, поэтому, должно быть, я что-то не так сделал на стороне ядра .net.

Я настроил основной проект .net следующим образом:

    public void ConfigureServices(IServiceCollection services)
    {
        var storageAccount = CloudStorageAccount.DevelopmentStorageAccount;
        var client = storageAccount.CreateCloudBlobClient();
        var container = client.GetContainerReference("key-container");

        services.AddDbContext<AuthContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));

        services.AddDefaultIdentity<RefereeUser>()
                .AddEntityFrameworkStores<AuthContext>()
                .AddDefaultTokenProviders();

        services.AddDataProtection()
                .PersistKeysToAzureBlobStorage(container, "keys.xml");

        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = false,
                ValidateAudience = false,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = false,
                ValidIssuer = "yourdomain.com",
                ValidAudience = "yourdomain.com"
            };
        });

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

Что мне здесь не хватает, чтобы заставить его работать?

...