2016-10-28 2 views
1

Я Работающий прототип Visual Studio Solution с помощью IdentityServer4, который имеет:Доступ к защищенному .net API с маркером от IdentityServer4

  • IdentityServer (asp.net ядро ​​MVC)
  • API проекта (ядро asp.net MVC)
  • Web Client 1 (MVC/Угловой) (Имя пользователя/пароль администратор защищенный портал) беседует с API
  • Web Client 2 (MVC) (сайта Public облицовочных, нет Логина)

У меня есть рабочий и основной тест на работу с веб-клиентом 1, работающий с API.

Мой вопрос лучше всего описывается с использованием примера: Предположим, что у меня есть метод в моем API, защищенный атрибутом [Авторизовать] для GetCourses (защищенный с помощью авторизации, поэтому он не доступен никому, если они знают URL-адрес). В настоящее время это работает, потому что мой тест входит в систему с пользователем на веб-клиенте 1 (который будет использоваться для редактирования курсов в конце концов).

Но на моем общедоступном веб-сайте я хочу иметь возможность вызвать GetCourses с ClientCredentials в IdentityServer, чтобы я мог отображать список курсов на веб-сайте. Я ожидаю, что я пойду об этом неправильно, поэтому, если кто-нибудь сможет предоставить какие-либо указатели, это будет очень признательно.

Благодаря Richard

ответ

0

Предполагая, что вы используете аутентификацию куки для веб-клиента 1:

// for Web Client 1 Scheme = Cookies 
    app.UseCookieAuthentication(); 

    // for Web Client 2 Scheme = Bearer 
    app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions 
    { 
     ... 
    }); 

Вам просто нужно использовать ActiveAuthenticationSchemes, как показано ниже:

[Authorize(ActiveAuthenticationSchemes = "Cookies, Bearer")] 
public IActionResult GetCourses(){ ... } 

Для получения дополнительной информации см https://docs.asp.net/en/latest/security/authorization/limitingidentitybyscheme.html

+0

А это похоже на то, что я ищу, буду исследовать, что дальше, спасибо – RichardB

Смежные вопросы