У меня есть проект, в котором размещен IdentityServer4, и я пытаюсь также разместить в том же проекте веб-API, который принимает токен доступа.
Мой вопрос: возможно ли, что один проект содержит IdentityServer и веб-API, которые используют один и тот же IdentityServer?
РЕДАКТИРОВАТЬ: API должен быть защищен атрибутом авторизации





У меня есть проект сервера идентификации 4, в этом же проекте есть API для CIUD клиентов. (Назовем это api консоли разработчика).
Затем у меня есть побочный проект - это основной проект asp .net, который содержит фактические страницы бритвы для консоли разработчика, для доступа к API в рамках проекта сервера идентификации.
Причина, по которой я сделал это таким образом, заключается в том, что только один проект должен обновлять базу данных. Поэтому для обновления базы данных, принадлежащей серверу идентификации, было решено, что API для доступа к ней также должен находиться в том же проекте.
Да, у вас может быть веб-API из вашего проекта Identity server 4.
Настроить сервис
services.AddAuthentication(IdentityServerConstants.DefaultCookieAuthenticationScheme)
.AddIdentityServerAuthentication(options =>
{
// base-address of your identityserver
options.Authority = settingsSetup.Settings.Authority;
// name of the API resource
options.ApiName = "testapi";
options.RequireHttpsMetadata = false;
});
Настроить
Я думаю, что необходимо иметь и то, и другое.
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
app.UseAuthentication();
app.UseIdentityServer();
Конечные точки
Поскольку запросы отправляются с использованием токена доступа в качестве токена-носителя, авторизация для каждого из вызовов API должна включать authencationScheme. Я не совсем понял, почему, но без этого не работает.
[HttpGet("Client/List")]
[Authorize(AuthenticationSchemes = "Bearer")]
public ActionResult ClientList()
{
}
Хороший вопрос, я помню, как было больно. Я могу отредактировать вопрос и дать вам кое-что из своего стартапа. Сообщите мне, если у вас возникнут проблемы.
Вау, я в шоке, возможно, мне придется это задокументировать :)
Хотя ответ @ DaImTo правильный и работает, и он разработан командой IdentityServer, он использует Introspection Endpoint, что означает, что для каждого запроса AddIdentityServerAuthentication будет создавать HTTP-запрос и отправлять его на ваш сервер, который является тем же приложением.
Я разработал библиотеку под названием IdentityServer4.Contrib.LocalAccessTokenValidation, которая делает то же самое, но без использования Introspection Endpoint. Он будет аутентифицировать токен непосредственно из TokenStore, который настроен в Сервисах. Вы можете использовать это, если вам интересно.
ссылка nuget: https://www.nuget.org/packages/IdentityServer4.Contrib.LocalAccessTokenValidation
ссылка на github: https://github.com/Kahbazi/IdentityServer4.Contrib.LocalAccessTokenValidation
привет, спасибо, я не могу понять, как это использовать. вы можете мне помочь с первоначальной настройкой?
Спасибо за ответ, как мне настроить проект IdentityServer как на проблему, так и на потребителя?