Пользовательский интерфейс администратора IdentityServer4

Я работаю над IdentityServer4.AdminUI, который разработан на github GitHub IdentityServer4.AdminUI

Сначала я просто создал нового пользователя и установил ему пароль, затем я создал новый ApiResource с именем Api_Name. Затем я создал IdentityResource с тем же именем Api_Name. Наконец, я создал нового клиента с именем Api_Client и установил для клиента Allowed Scopes значение Api_Name, а Allowed Grant Types - Пароль и, наконец, установил секрет клиента на секрет.

Теперь я создал новый проект WebApi (Core 2.1) и использую его в классе запуска.

public void ConfigureServices(IServiceCollection services) {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        services.AddMvcCore().AddAuthorization().AddJsonFormatters();

        services.AddAuthentication("Bearer")
            .AddIdentityServerAuthentication(options => {
                options.Authority = "http://localhost:5000"; //Identity Server URL
                options.RequireHttpsMetadata = false; // make it false since we are not using https
                options.ApiName = "Api_Name"; //api name which should be registered in IdentityServer
            });
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
        if (env.IsDevelopment()) {
            app.UseDeveloperExceptionPage();
        }
        else {
            app.UseHsts();
        }

        app.UseAuthentication();

        app.UseHttpsRedirection();
        app.UseMvc();
    }

и конечно я использовал атрибут [Authorize] в контроллере WebApi

Наконец, тест. Я создал консольное приложение и использую этот код

var identityServer = await DiscoveryClient.GetAsync("http://localhost:5000"); //discover the IdentityServer
        if (identityServer.IsError) {
            Console.Write(identityServer.Error);
            return;
        }

        HttpClient client = new HttpClient();

        var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest {
            Address = identityServer.TokenEndpoint,
            ClientId = "Api_Client",
            ClientSecret = "secret",

            UserName = "Majd",
            Password = "P@ssw0rd@123"
        });

        if (tokenResponse.IsError) {
            Console.WriteLine(tokenResponse.Error);
            return;
        }

        //Call the API

        client.SetBearerToken(tokenResponse.AccessToken);

        var response = await client.GetAsync("https://localhost:44368/api/values");
        var response2 = await client.GetAsync("https://localhost:44368/api/values/1");
        var content = await response.Content.ReadAsStringAsync();
        Console.WriteLine(JArray.Parse(content));
        Console.ReadKey();

Проблема в том, что response2 return UnAuthorized 401. Итак, почему я получил эту ошибку, поскольку я использовал полученный токен доступа с сервера идентификации

как насчет возврата результата ответа .. ??

Soumen Mukherjee 14.01.2019 18:23

Ответ возвращает значение из API, но не авторизовано. Я поставил это для уверенности, что все в порядке

Majd Albaho 14.01.2019 18:49

Вы пытались добавить пользователя в роль и предоставить доступ к этой роли API ...

Soumen Mukherjee 14.01.2019 18:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
3
5 059
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам также необходимо добавить запрошенную область в ваш запрос токена (даже если вы сказали, что клиенту разрешен доступ к Api_Name).

    var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest {
        Address = identityServer.TokenEndpoint,
        ClientId = "Api_Client",
        ClientSecret = "secret",

        UserName = "Majd",
        Password = "P@ssw0rd@123",
        Scope = "Api_Name"
    });

В IDS4 токены выдаются только для запрошенных областей, в отличие от IDS3, где вы получите все области, разрешенные клиенту. Что касается вашего промежуточного программного обеспечения для аутентификации Api, вашему клиенту не разрешили получить к нему доступ, потому что токена не хватило.

Именно этого и не хватает. Я должен добавить область для моего ApiResource и предоставить доступ к этой области в клиенте.

Majd Albaho 14.01.2019 22:10

Другие вопросы по теме