Проблема с Okta в Aspnet.Core Web API InvalidOperationException - PullRequest
0 голосов
/ 27 февраля 2019

В настоящее время у меня есть угловой пользовательский интерфейс 6, который успешно отправляет токен доступа Okta в мой Asp.net Core Web API 2.1, который размещен на IIS 7.5.

Однако я получаю эту ошибку: Система.InvalidOperationException: не была указана схема authenticationScheme, и не было найдено DefaultChallengeScheme.

В IIS я отключил проверку подлинности Windows и включил анонимный доступ.Я не уверен, что мне нужно делать что-то еще, потому что иногда браузер Chrome сначала делает опции (http verb).

В моем файле startup.cs я сделал это:

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = OktaDefaults.ApiAuthenticationScheme;
                options.DefaultChallengeScheme = OktaDefaults.ApiAuthenticationScheme;
                options.DefaultSignInScheme = OktaDefaults.ApiAuthenticationScheme;
            })
            .AddOktaWebApi(new OktaWebApiOptions()
            {
                ClientId = _configuration.GetOktaClientID(), //static method to get OktaClientID from Config file
                OktaDomain = _configuration.GetOktaDomain(),//static method to get Okta Domain from Config file
                Audience = "api://default"

            });

        services.AddMvcCore(opts =>
        {
        }).SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_1)
            .AddAuthorization(options =>
            {
                options.AddPolicy("API_READ", policy => policy.Requirements.Add(new BasicAuthorizationFilter("API_READ")));
             })
            .AddFormatterMappings()
            .AddCors()
            .AddDataAnnotations() // Optional if no validation using attributes
            .AddApiExplorer()     // Not Optional
            .AddJsonOptions(options =>
            {
                options.SerializerSettings.Converters.Add(new StringEnumConverter());
            })
            .AddJsonFormatters(o =>
            {
                o.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                o.Formatting = Newtonsoft.Json.Formatting.Indented;
            });
        services.AddCors(options =>
        {
            options.AddPolicy("AllowAll",
                builder => builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowCredentials()
                .WithExposedHeaders("X-InlineCount")
                .AllowAnyHeader());
        });

У меня есть контроллер для проверки:

    [HttpGet]
    [Authorize]
    [EnableCors("AllowAll")]
    public IActionResult Get()
    {
        var principal = HttpContext.User.Identity as ClaimsIdentity;


        return Ok(principal);

    }
...