Как аутентифицировать пользователей в WebServices с помощью ключа, используя различные проверки

Я работаю с веб-API, который использует Active Directory для аутентификации пользователей. Я использую этот API в PHP для входа в систему пользователя, который находится в моем ключе WEB API (ключ находится в файле «Web.Config»). Я новичок в С# веб-API, и что-то не так, что я не могу решить. Мне нужно вставить некоторые проверки для пользователя. Первый - если пользователь не находится в ключе «Возврат не разрешен». Если пользователь находится в ключе, но имя пользователя или пароль недействительны, «Верните неверное имя пользователя или пароль», и если пользовательский ввод верен, зарегистрируйте пользователя в системе.

public string IsAuthenticated(string user, string pass, string domain)
        {
            DirectoryEntry objDirEntry = new DirectoryEntry("LDAP://" + domain, user, pass);
            try
            {
                string UserName = user.ToString();
                string Password = pass.ToString();
                string Domain = "Netsolpk";
                DirectorySearcher search = new DirectorySearcher(objDirEntry);
                SearchResult result = search.FindOne();
                if (result == null)
                    return "You're not in the Domain";
                string AdAuthentication = IsAuthenticated(UserName, Password, Domain);
                string[] name = ConfigurationManager.AppSettings["name"].Split(',');
                string authorized = "false";
                foreach (var author in name)
                {
                    if (AdAuthentication == "true" && author.ToLower() == user.ToLower())
                    {
                        return "true"; //login
                    }
                    else if (author.ToLower() == user.ToLower())
                    {
                        return "Invalid Password";
                        authorized = "true";
                        break;
                    }
                }
                if (AdAuthentication == "false")
                {
                     return "Not Allowed";
                }
                return "false";
            }
            catch (Exception)
            {
                return "false";
            }
        }

<appSettings>
    <add key="webpages:Version" value="3.0.0.0"/>
    <add key="webpages:Enabled" value="false"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
    <add key="name" value="DavidR,JohnH"/>
  </appSettings>

person Hamza Iftikhar    schedule 19.12.2019    source источник
comment
Каковы ваши проблемы?   -  person mikenlanggio    schedule 19.12.2019


Ответы (1)


  1. Где именно ваша проблема?

  2. Взгляните на токены аутентификации JWT. Это хороший способ вернуть токены отмены, если пользователь неавторизован, или вернуть токен для входа в систему. Вы можете легко протестировать API с помощью Почтальон.

Вот небольшой пример:

[HttpPost]
public ActionResult Login([FromBody]LoginModel GetLoginData)
{
  /// Get SAM and Passowrd
  var service = new JSON();
  var LoginUser = service.GetData(GetLoginData);
  _logger.Log(LogLevel.Information, $"User {LoginUser.SAM} tried to Login.");

  /// Checks if user is allowed to login
  var db = new DB();
  bool IsAllowed = db.GetUserBySAM(LoginUser);

  if (IsAllowed == true)
  {
    /// Checks if Password is correct in LDAP
    var ldap = new LDAP();
    bool PasswordCorrect = ldap.IsUserPasswordCorrect(LoginUser);

    if (PasswordCorrect == true)
    {
      /// Gets Userdata from AD
      LoginUser = ldap.GetUserData(LoginUser);
      var auth = new Authentication();

      /// Generates a Token which expire in 5 minutes
      var JwtToken = auth.CreateToken(LoginUser);

      _logger.Log(LogLevel.Information, $"User {LoginUser.SAM} successfully logged in.");
      return Ok(new
      {
        token = JwtToken,
        allowed = "Authorized",
        username = LoginUser.SAM,
        firstname = LoginUser.FirstName,
        lastname = LoginUser.LastName
      });
    }
    else return Unauthorized();
  }
  _logger.Log(LogLevel.Information, $"User {LoginUser.SAM} is not allowed to login.");
  return Unauthorized();
}
person Blackbear    schedule 19.12.2019