Mam kolejne zadanie związane z uwierzytelnianiem do serwerów.
Przyszła pora by aplikacja wspierała na platformie Windows Integrated Windows Authentication korzystając z metody uwierzytelnienia Negotiate.
Znalazłem doskonały przykład jak można to zrobić na Windows: https://github.com/adobe/chromium/blob/master/net/http/http_auth_sspi_win.cc
i się na nim bardzo wzoruje.
Mam jednak parę wątpliwości.
Po pierwsze czy wywołania funkcji systemowych są blokujące? (bo np system musi wykonać jakieś operacje sieciowe na domenie)
Chodzi o wszystkie funkcje ukryte za interfejsem: SSPILibrary czyli:
- AcquireCredentialsHandle
- InitializeSecurityContext (ta mnie najbardziej martwi)
Wolałbym, żeby nie były blokujące bo wtedy nie musiałbym angażować dodatkowych wątków.
Dokumentacja nic mi na ten temat nie mówi, albo za słabo ją przeczytałem: https://msdn.microsoft.com/en-us/library/windows/desktop/aa375506(v=vs.85).aspx
ale może ktoś będzie coś wiedział z własnego doświadczenia.
Kolejne pytanie Service Principal Name (SPN) https://msdn.microsoft.com/en-us/library/windows/desktop/aa375506(v=vs.85).aspx (pierwszy mój kontakt z tym czymś).
To powinno mieć formę: < service type >/< instance name >:< port number >
Z końcówką nie ma problemu: < instance name >:< port number >
jest w miarę oczywiste i dokumentacja jest jasna.
Problemem jest początek < service type >
. W moim przypadku serwery docelowe to będą różne usługi na protokołach: http
, https
, ws
, wss
Czy ten < service type >
odpowiada scheme z URL-a (protokołowi)? Czy to może być coś zależne od danego serwera?
Dokumentacja w tej materii jest dość uboga i nie pasuje do mojego przypadku, więc nie mam pojęcia co powinienem tam wstawić.
I na koniec co się dzieje jeśli maszyna jest poza domeną (np ktoś wyniesie laptop firmowy poza sieć wewnętrzną).
Z góry dzięki za każdy feedback