OpenId Connect, лучший способ заставить клиентскую сторону токена-носителя вызывать WebApi после входа в MVC?

Я надеюсь, что кто-нибудь может мне посоветовать, пожалуйста.

Я следил за измененной формой этого руководства Начало работы с сервером идентификации thinktecture, чтобы попытаться настроить сайт с аутентификацией OpenId Connect.

У меня это настроено:

Проект Asp.NET MVC, действующий как сервер идентификации

Проект Asp.NET MVC, выступающий в качестве защищенного веб-сайта.

Эта установка работает отлично. Когда кто-то пытается получить доступ к контроллеру с атрибутом [Authorize] на защищенном веб-сайте, они перенаправляются на сервер идентификации для входа в систему, а затем перенаправляются обратно на защищенный веб-сайт после успешного входа в систему.

Теперь я хотел бы добавить в микс веб-API. Я создал проект WebApi, но в отличие от учебника, где он называется серверной стороной с использованием «служебной учетной записи», я хотел бы назвать его клиентской стороной (JQuery) с защищенного веб-сайта с идентификатором текущего пользователя, вошедшего в систему.

Я понимаю, что мне нужно использовать токен-носитель в заголовке аутентификации.

Мой вопрос: как мне получить токен-носитель для текущего пользователя, вошедшего в систему на стороне клиента, чтобы я мог установить заголовок? (Пользователь уже вошел в систему.)

Заранее большое спасибо за вашу помощь




Ответы (2)


Если вы используете .Net Framework 4.5.1 в своем приложении Identity Server, возможно, у вас уже есть TokenEndpointPath, определенный как «/ Token». Загляните в свой файл Startup.Auth.cs в папке App_Start.

Вызывающий клиент может получить токен-носитель из конечной точки / Token путем POST-отправки действительного имени пользователя / пароля в конечную точку. Я создал простой код, чтобы поэкспериментировать с моим собственным проектом ASP.NET Web Api 2 с использованием новой инфраструктуры Windows Identity Foundation. Вы можете найти в нем что-нибудь полезное:

http://codepen.io/randomfactor/pen/bNpBoP?editors=101

    # THIS IS CoffeeScript (because we are not barbarians)
    # start by trying to get an access token
    $.ajax {
      type: 'POST'
      url: "#{appUrl}/Token"
      contentType: 'application/x-www-form-urlencoded; charset=UTF-8'
      data: {
        grant_type: 'password'
        username: $('#login-name').val()
        password: $('#password').val()
      }
    }
    .then (data) ->

Имейте в виду, что кодовое слово по определению отправляет запрос на общий доступ к ресурсам вашего проекта Identity Server. Чтобы это сработало, вам нужно будет изменить проект Identity Server для поддержки CORS, как описано в комментариях к codepen.

Если вы хотите объединить свой Identity Server с защищенным веб-сайтом и проектом Web Api под .Net 4.5.1 (настоятельно рекомендуется!), Это упростит некоторые вещи, и вам не потребуются модификации CORS.

person randomfactor    schedule 19.12.2014

Я думаю, вы можете внедрить их в DOM в _Layout.cshtml. Лучше инициализировать OidcClient и AJAX перед отправкой. Как вы думаете, @PinpointTownes?

person Andrii    schedule 29.12.2017