Проверка подлинности Windows в Asp.Net Core 2.1 с Angular 6 - Chrome Continuous Login Prompt - PullRequest
0 голосов
/ 25 декабря 2018

Я создал приложение для интрасети, которое должно знать, кто является пользователем Windows, прошедшим проверку подлинности, для обеспечения безопасности и проверки подлинности на основе ролей.

Никаких проблем с Edge ... проверенный пользователь определен правильно.В Chrome, тем не менее, пользователи постоянно получают запросы (даже если они вводят свои учетные данные в запросе).

Мне предлагается при локальном запуске веб-приложения (IIS Express), а также при развертывании на веб-сервере.под управлением IIS 7.5

Я пробовал различные конфигурации пула приложений iis, ни одна из которых не препятствует аутентификации.URL-адрес находится в списке доверенных веб-сайтов в окне «Свойства обозревателя».Проверка подлинности Windows и олицетворение идентичности включены в IIS.

Вызов API домашнего компонента:

 constructor(http: HttpClient, @Inject('BASE_URL') baseUrl: string)
  {
    http.get<User>(baseUrl + 'api/Auth/GetUserName', {withCredentials: true}).subscribe(result =>
    {
      this.user = result;
    }, error => console.error(error));
  }

Контроллер C #:

[Route("api/[controller]")]
[ApiController]
public class AuthController : Controller
{
    [AllowAnonymous]
    [HttpGet("[action]")]
    public User GetUserName()
    {
        WindowsIdentity currentUser = WindowsIdentity.GetCurrent();
        string domainContextName = "";
        try
        {
            DomainContext domainContext = AppHelper.CurrentDomainContext;
            domainContextName = domainContext.UserId;
        }
        catch(Exception ex)
        {
            domainContextName = ex.Message;
        }

        User user = new User()
        {
            WindowsIdentityGetCurrent = currentUser.Name,
            HttpContextUserIdentityName = HttpContext.User.Identity.Name,
            DomainContextName = domainContextName
        };

        return user;
    }
}

1 Ответ

0 голосов
/ 08 января 2019

Я решил проблему с моей стороны.

Оказалось, что у меня был Http Interceptor, который вставлял токен jwt в мои соответствующие контроллеры API для GetAuth и GetConfiguration.Мне пришлось добавить условие, чтобы заголовок авторизации jwt НЕ был добавлен к этим двум вызовам http.Как только я это сделал, контроллеры перестали выбрасывать 401, и проверка подлинности Windows снова начала работать.

Это помогло: Смешанная аутентификация ASP.Net Core 2.0 для JWT и аутентификации Windows не принимает учетные данные

Вот соответствующие биты в моем HttpAuthInterceptor:

setHttpRequestHeaders(req: HttpRequest<any>, token: string): HttpRequest<any>
{
if (!req.headers.has('Authorization') && token)
{
  let jwt: string = 'Bearer ' + token;

  req = req.clone({ headers: req.headers.set('Authorization', jwt) });
}

// setting the accept header
req = req.clone({ headers: req.headers.set('Accept', 'application/json') });

return req;
}
...