Как настроить двойную аутентификацию и настроить текущего пользователя в вызове API ядра ASP.NET с помощью токенов и файлов cookie - PullRequest
0 голосов
/ 30 марта 2019

У нас есть корпоративное приложение .Net Core, которое использует ASP.NET Core Identity Cookie Authentication с пользователями и ролями, сохраненными в нашей локальной базе данных в таблицах aspnetcore.Это приложение имеет несколько API, которые вызываются из него, и у всех есть тег [Authorize].Мы создаем надстройку Outlook и хотели бы вызывать эти API-интерфейсы с использованием токенов на предъявителя.Некоторые из API возвращают пользовательские данные и ожидают, что будет установлен пользователь Identity, то есть Httpcontext.User.Это, конечно, хорошо работает для вошедшего в систему пользователя через корпоративное приложение, но не из надстройки Outlook.При вызове API, поступающего из Outlook, известно только имя и адрес электронной почты пользователя, а не его пароль, поэтому мы не видим способа автоматической установки Httpcontext.User, если это не может быть выполнено с помощью утверждений или ролей токена.Пользователи могут войти в систему либо с помощью своего назначенного идентификатора, либо по электронной почте.

Ниже приведены дополнительные сведения о настройке:

  • Оба приложения зарегистрированы на портале регистрации приложений Microsoft
  • Корпоративное приложение имеет области, определенные для предоставления API-интерфейсов и обеспечения доступа к ним надстройки
  • Надстройка Outlook имеет один API-интерфейс и позволяет Outlook получать к нему доступ
  • Надстройка Outlookсоздает токен в Office.initialize с помощью Office.context.auth.getAccessTokenAsync и вызывает один API-интерфейс Outlook, который, в свою очередь, проверяет этот токен, чтобы убедиться, что в нем есть «access_as_user», и, если это так, получает вторичный токен, чтобы получить доступ кAPI нашего корпоративного приложения.Он использует пароль приложения, издателя и аудиторию из формы регистрации портала приложения для получения этого токена, поскольку он использует токены jwtBearer, а не токены Azure AD.

Весь соответствующий код находится на GitHub по адресу:

https://github.com/KAGUser/DualAuthQuestions

У нас есть несколько вопросов / вопросов:

  1. Надстройка знает адрес электронной почты вызывающего абонента, исходящий из outlook, который совпадает с адресом электронной почты этогоПользователь в нашей модели идентификации в базе данных, но HttpContext.User не установлен, так как идентификатор пользователя и пароль не известны.Есть ли скрытый способ .Net core настроить пользователя на основе его электронной почты, которая также является его идентификатором и определением утверждений или ролей токена, или нам нужно сделать это вручную, и как мы это делаем, не зная его индивидуального пароля??
  2. Объединение двух аутентификаций, основанных на ссылке ниже, не работает для нас, и кажется, что нам нужно будет создать два набора API, один для аутентификации cookie и один для аутентификации jwtBearer.Если мы просто добавим [Authorize] для API, тогда будет работать только авторизация cookie, если мы сделаем это так, как говорит ссылка, работает только jwtBearer.https://docs.microsoft.com/en-us/aspnet/core/security/authorization/limitingidentitybyscheme?view=aspnetcore-2.2&tabs=aspnetcore2x
  3. токены jwtBearer против токенов Azure AD.Токены Azure AD содержат дополнительную информацию, такую ​​как oid, для уникальной идентификации пользователя.Они применяются здесь?Мы столкнулись с проблемой объединения аутентификации AzureAD и Identity.И cookie, и jwtBearer имеют константы, которые можно использовать в атрибуте [Authorize], JwtBearerDefaults.AuthenticationScheme и CookieAuthenticationDefaults.AuthenticationScheme, но, похоже, что AzureAd не имеет их, и они используют AzureADDefaults.AuthenticationScheme или AzureedeshareScheme в AzureADDefa.что это не константа.

Любая помощь очень ценится!

...