В настоящее время у меня есть угловой пользовательский интерфейс 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);
}