Identity Server 4 API управления пользователями
Мне удалось получить решение, работающее с одностраничным проектом приложения (ReactJS
), API работает на ASP.net Core
проект и IdentityServer 4
проект.
Я хочу иметь возможность вызывать API на IdentityServer 4
проект из одностраничного проекта приложения.
Я создал простой класс контроллера в IdentityServer 4
приложение, с атрибутом авторизации. Если я позвоню через Postman
Однако я получаю HTML-код для страницы входа.
Это происходит после того, как я уже вошел в API и использую тот же токен.
Как я должен войти на сервер идентификации, чтобы звонить на него, чтобы управлять пользователями?
1 ответ
Как указано в комментариях, вы обязательно должны добавить больше информации к вашему вопросу. Ваш контроллер является частью приложения mvc сервера идентификации? Вы используете AspnetCore.Identity?
Если это так, ваш контроллер защищен схемой проверки подлинности cookie AspnetCore.Identities. Вам необходимо отправить куки для доступа к контроллеру. Это не имеет ничего общего с сервером идентификации, так как вы находитесь в локальном приложении MVC, это просто обычный MVC.
У почтальона проблемы с отправкой куки, вам нужно расширение Chrome для перехватчика. Вы также должны войти через почтальона.
Это, вероятно, будет работать, если SPA размещается в том же приложении MVC. Если нет, вам нужно будет настроить приложения mvc для проверки токенов доступа (а не просто выдать их), например:
// Adds IdentityServer
app.UseIdentityServer();
// Accept access tokens from identity server
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = "http://localhost:5000",
RequireHttpsMetadata = false,
AuthenticationScheme = "Bearer"
ApiName = "api1"
});
Таким образом, вы можете запросить токены доступа для вашего локального API через идентификационный сервер (вам также необходимо настроить область API для 'api1').
Чтобы проверить их в вашем api-контроллере, добавьте это в свой контроллер:
[Authorize(ActiveAuthenticationSchemes = "Bearer")]
[HttpGet]
public string Bearer()
{
return "Access Token Accepted";
}