Как я могу использовать дайджест-аутентификацию с asp.net web api и angular js без формы входа?

Я создаю одностраничное приложение, которое будет использоваться пользователями только через приложение WPF. Никогда публично через традиционный браузер.

По сути, пользователи уже прошли аутентификацию через клиентское приложение WPF.

Приложение WPF использует существующий веб-API для использования данных и аутентификации пользователей.

После входа в приложение WPF пользователи могут перейти к разделу, в котором будет загружено мое одностраничное приложение через WPF Browser Control или подобное.

SPA будет использовать AngularJS и тот же веб-API, что и приложение wpf.

Я хотел бы аутентифицировать пользователей в разделе SPA при начальной загрузке страницы и защитить все запросы API, сделанные из SPA. Поскольку приложению angularjs требуется доступ к API, мне нужен способ получить учетные данные пользователя в веб-части приложения.

Могу ли я использовать дайджест-аутентификацию при начальной загрузке страницы и каким-то образом сохранить эти учетные данные на странице для использования angularjs? И если так, каков процесс установки этого в asp.net?

2 ответа

Отправляйте запросы из javascript на сервер через приложение WPF (которое может выполнять аутентифицированные вызовы) с использованием ObjectForScripting. Эта функция позволяет размещенному JS вызывать код.NET.

Я не знаком с Windows dev, но я думаю, что у меня похожая настройка:

  1. Сначала вы аутентифицируете своего пользователя.
  2. Затем вы генерируете на стороне сервера главную страницу вашего приложения AngularJS и включаете в ng-init объект, который содержит результаты вашей предыдущей аутентификации. Мой пример (синтаксис для генерации на стороне сервера - ejs):

        <body ng-init='{ user = { id : "<%= user._id %>",
            email : "<%= user.local.email %>",
            name :  "<%= user.local.first_name + " " + user.local.last_name %>",
            password : "<%= user.local.password %>",
            apiKey : "<%= user.local.apiKey %>",
        };'>
    
  3. В остальной части вашего приложения angularJS вы сможете использовать $rootScope.user.apiKey или $scope.user.apiKey

Надеюсь, это поможет. Удачи с вашим кодом. г

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