Strona logowania do Windows Authentication

0

Mam stronę internetową którą używa Windows Authentication do uwierzytelniania.
Gdy użytkownik pierwszy raz wchodzi na nią, przeglądarka wyświetla popup z prośba o login i hasło.
Chciałbym zamiast tego popupa zrobić własną stronę do logowania. (pola username, password i przycisk zaloguj).
Czytałem w kilku źrodłach że nie jest to takie proste, ale skoro w przeglądarce dało się stworzyć popup to czemu ma się nie dać zrobić strony która by to robiła?

Robił ktoś kiedyś coś takiego?
W jaki sposób przeprowadza się weryfikację danych podanych przez użytkownika w Windows Authentication?

2
AbcDefGhi napisał(a):

W jaki sposób przeprowadza się weryfikację danych podanych przez użytkownika w Windows Authentication?

Nie rozumiem co chcesz osiąnąć. Cały sens Windows Authentication polega na tym, że użytkownik logowany jest automatycznie na podstawie swojego konta domenowego i nie musi nigdzie podawać swoich poświadczeń. Raz zalogowany do domeny na swoim PC jest logowany do aplikacji automatycznie. Za https://is.docs.wso2.com/en/5.9.0/learn/integrated-windows-authentication-overview

The main advantage of this authentication mechanism is that users do not need to explicitly provide their credentials. Once users are logged into the Windows domain they are automatically authenticated for the IWA enabled web apps if the user is a valid user.

Tutaj bardziej szczegółowy opis tego procesu:

  1. The user (who is already authenticated to the Windows domain when they log in to Windows) sends a usual request to a protected page of a web application (protected by IWA).
  2. The server rejects the request and sends a response saying the user needs to be authenticated using NTLM.
  3. The client browser get the user's credentials which was used to log into Windows, takes the hash of it and sends it to the server.
  4. With the hash received, the server looks up the user store and identifies the user and creates an unique and encrypted challenge to send back to the client browser. That challenge can be only decrypted using the user's password which the browser already has with itself.
  5. The client browser decrypts the challenge with the user's credentials which the browser already knows, and sends the response back to the server.
  6. The server checks whether the response for the challenge is correct and serves the user requested resource if the answer is correct. If the answer is wrong, the server denies the access to the requested resources and sends the unauthorized message.

Nie mówiąc o tym, że jest to sposób uwierzytelniania nadający się do wykorzystania wyłącznie w sieci wewnętrznej przedsiębiorstwa czyli intranecie.

3

No teoretycznie możesz poprosić o nazwę użytkownika i hasło do jego konta i potem zwyczajnie się pod niego podszywać (personifikacja) lub próbować zalogować na to konto ale zupełnie nie tak to normalnie działa i ma działać.
Zwyczajnie nie jest przekazywane żadne hasło tylko token który jest weryfikowany potem przez kontroler domeny lub security accounts manager; żeby to zrobić potrzeba integracji z systemem którego strona nie jest w stanie zrobić.
To mniej więcej tak jakbyś prosił o hasło do paypala żeby się tam samemu zalogować i sobie wysłać pieniądze zamiast przekierować do strony logowania paypala z tokenem transakcji.

Jak chcesz fajniejsze logowanie to użyj windows hello / WebAuthn

0

Nie rozumiesz po co to logowanie zewnetrzne dlatego robisz jakieś dziwne ruchy. Może poszukaj po co to i wówczas ci się wyjaśni

0

Dzięki za odpowiedzi.

markone_dev napisał(a):
AbcDefGhi napisał(a):

W jaki sposób przeprowadza się weryfikację danych podanych przez użytkownika w Windows Authentication?

Nie rozumiem co chcesz osiąnąć. Cały sens Windows Authentication polega na tym, że użytkownik logowany jest automatycznie na podstawie swojego konta domenowego i nie musi nigdzie podawać swoich poświadczeń. Raz zalogowany do domeny na swoim PC jest logowany do aplikacji automatycznie.

Wszystko byłoby pięknie gdyby to logowanie faktycznie następowało automatycznie, ale niestety tak nie jest i użytkownik i tak musi wklepać swoje dane.
Jest może jakiś sposób żeby odczytać dane użytkownika z kontem którego została uruchomiona przeglądarka i dostać jego token?

0

Pokaż kod jak masz obsłużone to logowanie na swojej stronie z użyciem Windows Authentication. Napisałeś, że masz stronę, ale nie podałeś jaka technologia, co to za typ projektu, z czego jest front zrobiony. Dodatkowo napisałeś, że strona pokazuje popup z logowaniem, a to sugeruje, że user, którym otworzyłeś stronę nie jest autoryzowany automatycznie przez Windows Authentication dlatego pyta o podanie poprawnego loginu i hasła. Tak jak pisali poprzednicy, przy Windows Authorization nie ma loginu i hasła, to się dzieje automatycznie o ile użytkownik, który otwiera stronę jest poprawny.

0
AbcDefGhi napisał(a):

Dzięki za odpowiedzi.

markone_dev napisał(a):
AbcDefGhi napisał(a):

W jaki sposób przeprowadza się weryfikację danych podanych przez użytkownika w Windows Authentication?

Nie rozumiem co chcesz osiąnąć. Cały sens Windows Authentication polega na tym, że użytkownik logowany jest automatycznie na podstawie swojego konta domenowego i nie musi nigdzie podawać swoich poświadczeń. Raz zalogowany do domeny na swoim PC jest logowany do aplikacji automatycznie.

Wszystko byłoby pięknie gdyby to logowanie faktycznie następowało automatycznie, ale niestety tak nie jest i użytkownik i tak musi wklepać swoje dane.

To masz coś nie tak. Pokaz kod.

0

Strona jest napisana w ASP.NET MVC .NET 6, hostowana przez IIS (uwierzytelnianie anonimowe wyłączone w IIS, włączone tylko Windows Authentication). W kontrolerach API sa atrybuty [Authorize] i jeżeli użytkownik próbuje wysłać żądanie po raz pierwszy to automatycznie sie pojawia popup w przeglądarce z prośbą o dane logowania. Nie mam żadnej logiki logowania napisanej własnym kodem.

Jak będzie trzeba to potem napisze na szybko jakiś przykładowy kod żeby pokazać, jeśli nadal chcecie zobaczyć.

0

W samym IIS nie wystarczy, aplikacja jeszcze musi wiedzieć jakiej autoryzacji używasz, a to się konfiguruje w pliku web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <security>
        <authentication>
          <anonymousAuthentication enabled="false" />
          <windowsAuthentication enabled="true" />
        </authentication>
      </security>
    </system.webServer>
  </location>
</configuration>

Może tutaj też coś nakieruje - User login in asp.net MVC using windows authentication without prompt

PS.
Z tego co się orientuje, poprawcie mnie jeśli mówię głupoty, to Windows Authentication wymaga Domain Controller, albo Active Directory. To nie zadziała tak, że teraz każdy komputer z Windowsem będzie w stanie się "zalogować" do aplikacji. Tego typu logowanie pomija tylko trzymanie userów w bazie i daje dostęp takim, którzy są skonfigurowani na serwerze jako Windows User, na którym stoi IIS w obrębie sieci LAN. Dać możliwość logowania z zewnątrz jest moim zdaniem "lekko" niebezpieczne 🤔

0

W pliku program.cs mam jeszcze skonfigurowane:

builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();
builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = options.DefaultPolicy;
});

...

app.UseAuthentication();
app.UseAuthorization();

Co do pliku web.config to sprawdze w poniedziałek czy mam te ustawienia wpisane, aczkolwiek wydaje mi sie ze IIS odczytuje ustawienia z tego pliku, jeszcze się upewnie.
Sprawdze też zgodnie z sugestią z linku czy jak się zostawi samo NTML w dostawcach czy coś to zmieni.

Serwer i użytkownicy należą do tej samej domeny i mają konta AD.
Użytkownicy nie mają założonych fizycznie kont na serwerze hostującym aplikacje jak i również mają zablokowaną możliwość zalogowania się bezpośrednio na serwer, natomiast logowanie do aplikacji dla nich działa (popup wyskakuje).
Ja mam dostęp do serwera używając konta AD i również loguję się na moim urządzeniu (w tej samej domenie) używając tego samego konta w tej samej domenie i mnie też prosi o login i hasło.
Podanie błędnych danych przy logowaniu nie przepuszcza dalej.
Wydaje mi się że domena nie jest tu problemem tylko konfiguracja aplikacji.

Edit:
Stworzyłem nowy projekt i też wymaga podania danych na komputerze lokalnym podczas debugowania z profilem IIS. Zmiany w pliku web.config nic nie dały. I zostawienie samego NTML w dostawcach uwierzytelniania tez nie pomogło.

Edit 2:
Już sam IIS pokazuje to okienko.
Stworzyłem folder a w nim tylko 1 plik index.html.
Żeby otworzyć stronę trzeba podać dane. Nie ma rożnicy czy to projekt .NETowy czy cokolwiek innego sie wsadzi do folderu strony.

Edit 3:
Znalazłem że to zależy od ustawień internetowych w systemie co sprawia że jest to problem niezależny od samej aplikacji i ciężko to bedzie zmienić. Dodatkowo nie każda przeglądarka respektuje te ustawienia.
screenshot-20240127225428.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1