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";
    }
Другие вопросы по тегам