В настоящее время я работаю над созданием решения .net core 2.1, чтобы переместить код наших команд и убедиться, что мы находимся на последней версии библиотек, которые мы используем.Однако, часть этого должна быть сделана позже, например, сервер идентификации, который использует IdentityServer3.
В свете существующего IdentityServer4, но мы пока не можем перейти к этому, я пытаюсь получить нашновый проект веб-API запущен и работает с IdentityServer4.AccessTokenValidation и подключите его к имеющемуся IdentityServer3.
Теперь, существующий проект веб-API, который даже не удосужился использовать IdentityServer3.AccessTokenValidation, написал пользовательскийатрибуты и связь с IdentityServer3 для обработки аутентификации токена / области.Это противоречит лучшим практикам в ядре из того, что я видел, и ядро не просто больше делает область действия, но и использует политики, которые имеют области действия ...
Новый NET Core Web API был настроен такв файле startup.cs:
//ConfigureServers(IServiceCollection serviceCollection)
var mvcBuilder = serviceCollection.AddMvcCore();
mvcBuilder.AddApiExplorer();
mvcBuilder.AddJsonFormatters();
mvcBuilder.AddAuthorization();
mvcBuilder.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
//...
var athentication = serviceCollection.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme);
authentication.AddIdentityServerAuthentication(options => {
options.Authority = "https://www.example.com/api/connect/identity";
options.ApiName = null;
options.ApiSecret = null;
options.RequireHttpsMetadata = false;
options.LegacyAudienceValidation = true;
});
serviceCollection.AddAuthorization(options => {
options.AddPolicy("TempPrivaleges", builder => {
builder.RequireScope("TempScope");
};
});
//Configure(IApplicationBuilder app, IHostingEnvironment env)
app.UseHttpsRedirection();
app.UseMvc();
app.UseAuthentication();
Контроллер был настроен следующим образом:
[Authorize(Policy="TempPrivaleges")]
[Produces("application/json")]
[Route("api/[controller]/[action]")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet]
public ActionResult<string> SayHello()
{
return Ok("Hello");
}
[HttpGet]
public ActionResult<IEnumerable<string>> Test()
{
return Ok(new string[] { "Test1", "Test2" });
}
}
Однако, когда я использую SOAP UI, чтобы получить токен, затем сделатьзапрашивая мой API с указанным токеном, я всегда получаю несанкционированный доступ.
URL-адрес, который я использую для получения токена, выглядит следующим образом: https://www.example.com/api/connect/identity/connect/token
А существующий API использует следующее для проверки токена:https://www.example.com/api/connect/identity/connect/accesstokenvalidation
Ключевые вещи, которые мне неясны, это API и API Secret в Startup.cs.Я не уверен, какими должны быть эти ценности.Когда существующий API вызывает проверку, они не предоставляют ничего подобного.Я также не уверен, правильно ли установлен адрес авторизации.
Я также не могу найти никакой документации по включению входа на стороне API, чтобы увидеть, что он пытается сделать.У меня, к сожалению, нет доступа к работающему IdentityServer3, чтобы включить для него вход в систему.
Буду очень признателен за любую помощь, которую кто-либо может предложить.