Как предотвратить вход в систему с помощью [Authorize] WebAPI Core? - PullRequest
0 голосов
/ 24 июня 2019

Мой API должен вызываться аутентифицированными и неаутентифицированными пользователями из приложения Angular.Очевидно, добавление атрибута [Authorize] автоматически отправляет код состояния 401 со следующими заголовками и вызывает проблему:

WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Basic realm="bla.bla.bla"

Я не хочу, чтобы пользователи, у которых нет способа аутентификации, увиделивызов, когда они открывают страницу, но я хочу, чтобы пользователи, находящиеся в домене, проходили автоматическую аутентификацию.Поэтому я подумал, что мог бы создать метод, чтобы «проверять», аутентифицирован ли этот пользователь или нет, и если он / она будут, я получу информацию о пользователях, в противном случае просто отобразлю кнопку входа в систему (которая затем вызовет метод GetUser):

[HttpGet("Check")]
public IActionResult Check()
{
     return Ok(User.Identity.IsAuthenticated);
}

Идея состояла в том, что если бы это вернуло true, я мог бы просто вызвать метод GetUser (), который имеет атрибут [Authorize].Проблема в том, что если у меня нет атрибута [Authorize] для метода Check, он всегда возвращает false, если я добавляю [Authorize], он работает нормально, но это бросает вызов пользователям, которые еще не прошли аутентификацию.

Вот метод GetUser:

[HttpGet]
[Authorize]
public IActionResult GetUser()
{
    try
    {
                if (User.Identity.IsAuthenticated)
                {
                    var user = userService.GetUser(User.Identity.Name);
                    return Ok(user);
                } else
                {
                    return Unauthorized();
                }
            }
            catch (Exception ex)
            {
                return StatusCode((int)HttpStatusCode.InternalServerError, "Error getting user!");
            }
        }

По сути, я хочу, чтобы метод Check не вызывал вызов.Я просто хочу знать, аутентифицирован ли пользователь или нет.Я искал способы удаления заголовка WWW-Authenticate, но не смог заставить его работать.

Угловой вызов:

    getUser(): Observable<User> {
    return this.http.get<User>(environment.apiUrl + '/Users', { withCredentials: true });
  }

  check(): Observable<boolean> {
    return this.http.get<boolean>(environment.apiUrl + '/Users/Check', { withCredentials: true });
  }
}

Любые предложения, лучшие идеи?

Спасибо

...