Мой 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 });
}
}
Любые предложения, лучшие идеи?
Спасибо