Как настроить аутентификацию Active Directory с помощью Vue. js и. NET Core API - PullRequest
1 голос
/ 06 августа 2020

Я переписываю один из наших сайтов intr anet как. NET Core 3.1 WebAPI backend с Vue. js frontend. Я опытный программист, но плохо знаком с некоторыми из этих технологий. Мне нужно настроить аутентификацию с помощью Active Directory, чтобы пользователям локальной сети не приходилось входить на сайт.

Я видел кое-что об использовании токенов и отправке их в запросах API, но не знаю когда начать. В конечном итоге появится второй интерфейс Vue. js для внешних (сторонних) пользователей, которым потребуется аутентифицироваться с помощью формы имени пользователя / пароля. Таким образом, API должен уметь обрабатывать оба типа пользователей.

Как мне это настроить? Любые инструкции или рекомендации приветствуются. Я уверен, что у меня появятся другие вопросы, когда я займусь этим. Спасибо!

EDIT

Мне удалось заставить этот метод работать, чтобы взять имя пользователя / пароль и проверить его в нашем домене Active Directory (требуется пакет Microsoft.Windows.Compaibility )

using System.DirectoryServices.AccountManagement;
private bool IsValidUserAndPasswordCombination(string username, string password)
    {
        bool isValid = false;
        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "localdomainname.com"))
        {
            isValid = pc.ValidateCredentials(username, password);
        }
        return isValid;
    }

Теперь мне просто нужно знать, как лучше всего передать текущие учетные данные Windows пользователя в API. API настроен для анонимной аутентификации. Есть ли способ получить учетные данные в Vue. js и передать их без использования заголовков авторизации?

1 Ответ

0 голосов
/ 06 августа 2020

Думаю, вы можете проверить этот вопрос , который аналогичен вашему. Таким образом, вы можете сгенерировать токены JWT вручную (если они нужны для аутентификации), проверяя личность пользователей с помощью аутентификации LDAP. Speci c плагин браузера ... Возможно, единственный способ - запросить вход пользователя, как и любой другой веб-сайт, сохранить анонимность контроллера действий входа и использовать его для проверки пользователя.

После проверки вы можете сгенерировать JWT Токен для аутентификации клиента.

EDIT 2

Чтобы сгенерировать токен JWT, вы можете найти учебные пособия в Интернете, в основном вам нужно использовать пространство имен System.IdentityModel.Tokens.Jwt, например: 1014 *

var tokenHandler = new JwtSecurityTokenHandler();
// The secret must be kept and used to validate the token
var key = Encoding.ASCII.GetBytes(_appSettings.Secret);
var tokenDescriptor = new SecurityTokenDescriptor
{
  Subject = new ClaimsIdentity(new[] { new Claim("id", user.Id.ToString()) }),
  Expires = DateTime.UtcNow.AddDays(7), // maybe you want it to be shorter
  SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
 // If you want you can add as many claims you need in your token (roles etc.)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
var tokenString = tokenHandler.WriteToken(token);

Отправьте tokenString клиенту в ответ на запрос входа в систему и сохраните его в клиенте для отправки аутентифицированных запросов.

Вы также должны настроить API для авторизации пользователей через JWT жетоны и поручите ему принимать только ваш ( подробности см. здесь )

...