Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcja AcceptSecurityContext (NTLM) umożliwia składnikowi serwera aplikacji transportowej ustanowienie kontekstu zabezpieczeń między serwerem a klientem zdalnym. Klient zdalny używa funkcji InitializeSecurityContext (NTLM), aby rozpocząć proces ustanawiania kontekstu zabezpieczeń. Serwer może wymagać co najmniej jednego tokenu odpowiedzi od klienta zdalnego w celu ukończenia ustanawiania kontekstu zabezpieczeń.
Składnia
SECURITY_STATUS SEC_Entry AcceptSecurityContext(
_In_opt_ PCredHandle phCredential,
_Inout_opt_ PCtxtHandle phContext,
_In_opt_ PSecBufferDesc pInput,
_In_ ULONG fContextReq,
_In_ ULONG TargetDataRep,
_Inout_opt_ PCtxtHandle phNewContext,
_Inout_opt_ PSecBufferDesc pOutput,
_Out_ PULONG pfContextAttr,
_Out_opt_ PTimeStamp ptsTimeStamp
);
Parametry
phCredential[in, optional]
Dojście do poświadczeń serwera. Serwer wywołuje funkcję AcquireCredentialsHandle (NTLM) z flagą SECPKG_CRED_INBOUND lub SECPKG_CRED_BOTH ustawioną w celu pobrania tego uchwytu.
[in, out, optional]phContext
Wskaźnik do struktury CtxtHandle. W pierwszym wywołaniu metody AcceptSecurityContext (NTLM) ten wskaźnik to NULL. W kolejnych wywołaniach phContext jest uchwytem do częściowo sformułowanego kontekstu, który został zwrócony w phNewContext parametru przez pierwsze wywołanie.
Ostrzeżenie
Nie używaj tego samego uchwytu kontekstu w wywołaniach współbieżnych do metody AcceptSecurityContext (NTLM). Implementacja interfejsu API u dostawców usług zabezpieczeń nie jest bezpieczna wątkowo.
[in, optional] pInput
Wskaźnik do struktury SecBufferDesc wygenerowanej przez wywołanie klienta do initializeSecurityContext (NTLM), który zawiera deskryptor buforu wejściowego.
Informacje o powiązaniu kanału można określić, przekazując strukturę secBuffer typu SECBUFFER_CHANNEL_BINDINGS oprócz generowanych przez wywołanie funkcji InitializeSecurityContext (Ogólne). Informacje o powiązaniu kanału dla buforu powiązania kanału można uzyskać, wywołując funkcję QueryContextAttributes (Schannel) w kontekście Schannel klienta używanego do uwierzytelniania.
fContextReq[in]
Flagi bitowe określające atrybuty wymagane przez serwer do ustanowienia kontekstu. Flagi bitowe można łączyć przy użyciu operacji bitowychLUB. Ten parametr może być co najmniej jedną z następujących wartości.
| Wartość | Znaczenie |
|---|---|
| ASC_REQ_CONFIDENTIALITY | Szyfruj i odszyfruj komunikaty. |
| ASC_REQ_CONNECTION | Kontekst zabezpieczeń nie obsługuje formatowania komunikatów. |
| ASC_REQ_EXTENDED_ERROR | Gdy wystąpią błędy, strona zdalna zostanie powiadomiona. |
| ASC_REQ_INTEGRITY | Podpisz wiadomości i zweryfikuj podpisy. |
| ASC_REQ_REPLAY_DETECT | Wykryj ponownie odtwarzane pakiety. |
| ASC_REQ_SEQUENCE_DETECT | Wykrywanie komunikatów odebranych z sekwencji. |
Aby uzyskać informacje o możliwych flagach atrybutów i ich znaczeniach, zobacz Wymagania kontekstowe. Flagi używane dla tego parametru są poprzedzone ASC_REQ, na przykład ASC_REQ_DELEGATE.
Żądane atrybuty mogą nie być obsługiwane przez klienta. Aby uzyskać więcej informacji, zobacz parametr pfContextAttr.
TargetDataRep[in]
Reprezentacja danych, taka jak kolejność bajtów, w obiekcie docelowym. Ten parametr może być SECURITY_NATIVE_DREP lub SECURITY_NETWORK_DREP.
phNewContext[in, out, optional]
Wskaźnik do struktury CtxtHandle. Przy pierwszym wywołaniu metody AcceptSecurityContext (NTLM) ten wskaźnik otrzymuje nowy uchwyt kontekstu. W kolejnych wywołaniach phNewContext może być taki sam jak uchwyt określony w phContext parametru.
phNewContext nigdy nie powinna być NULL.
[in, out, optional] pOutput
Wskaźnik do struktury SecBufferDesc, która zawiera deskryptor buforu wyjściowego. Ten bufor jest wysyłany do klienta w celu wprowadzania danych wejściowych do dodatkowych wywołań metody InitializeSecurityContext (NTLM). Bufor wyjściowy może być generowany nawet wtedy, gdy funkcja zwróci SEC_E_OK. Wszystkie wygenerowane muszą być wysyłane z powrotem do aplikacji klienckiej.
pfContextAttr[out]
Wskaźnik do zmiennej, która odbiera zestaw flag bitowych wskazujących atrybuty ustalonego kontekstu. Aby uzyskać opis różnych atrybutów, zobacz Wymagania dotyczące kontekstu. Flagi używane dla tego parametru są poprzedzone ASC_RET, na przykład ASC_RET_DELEGATE.
Nie sprawdzaj atrybutów związanych z zabezpieczeniami, dopóki ostateczne wywołanie funkcji nie zostanie pomyślnie zwrócone. Flagi atrybutów niezwiązane z zabezpieczeniami, takie jak flaga ASC_RET_ALLOCATED_MEMORY, można sprawdzić przed ostatecznym zwróceniem.
[out, optional]ptsTimeStamp
Wskaźnik do struktury sygnatury czasowej, która odbiera czas wygaśnięcia kontekstu. Zalecamy, aby pakiet zabezpieczeń zawsze zwracał tę wartość w czasie lokalnym.
Uwaga
Do czasu ostatniego wywołania procesu uwierzytelniania czas wygaśnięcia kontekstu może być niepoprawny, ponieważ więcej informacji zostanie podanych w późniejszych etapach negocjacji. W związku z tym ptsTimeStamp musi być NULL do ostatniego wywołania funkcji.
Wartość zwracana
Ta funkcja zwraca jedną z następujących wartości.
| Zwracanie kodu/wartości | Opis |
|---|---|
| Funkcja nie powiodła się. Za mało pamięci, aby ukończyć żądaną akcję. |
| Funkcja nie powiodła się. Wystąpił błąd, który nie został zamapowyny na kod błędu interfejsu SSPI. |
| Funkcja nie powiodła się. Dojście przekazane do funkcji jest nieprawidłowe. |
| Funkcja nie powiodła się. Token przekazany do funkcji jest nieprawidłowy. |
| Logowanie nie powiodło się. |
| Funkcja nie powiodła się. Nie można skontaktować się z urzędem w celu uwierzytelnienia. Może to być spowodowane następującymi warunkami:
|
| Funkcja zakończyła się pomyślnie. [*kontekst zabezpieczeń*](.. /secgloss/s-gly.md) odebrany od klienta został zaakceptowany. Jeśli token wyjściowy został wygenerowany przez funkcję, musi zostać wysłany do procesu klienta. |
| Funkcja zakończyła się pomyślnie. Serwer musi wywołać metodę [CompleteAuthToken](/windows/win32/api/sspi/nf-sspi-completeauthtoken) i przekazać token wyjściowy do klienta. Następnie serwer czeka na token powrotny od klienta, a następnie wykonuje kolejne wywołanie metody [AcceptSecurityContext (NTLM)](acceptsecuritycontext--ntlm.md). |
| Funkcja zakończyła się pomyślnie. Serwer musi zakończyć tworzenie komunikatu z klienta, a następnie wywołać funkcję [CompleteAuthToken](/windows/win32/api/sspi/nf-sspi-completeauthtoken). |
| Funkcja zakończyła się pomyślnie. Serwer musi wysłać token wyjściowy do klienta i poczekać na zwrócony token. Zwrócony token powinien zostać przekazany w pliku pInput dla innego wywołania metody [AcceptSecurityContext (NTLM)](acceptsecuritycontext--ntlm.md). |
Uwagi
Funkcja AcceptSecurityContext (NTLM) jest odpowiednikiem serwera funkcji InitializeSecurityContext (NTLM).
Gdy serwer odbiera żądanie od klienta, serwer używa parametru fContextReq, aby określić, czego wymaga sesji. W ten sposób serwer może określić, że klienci muszą mieć możliwość korzystania z poufnych lub integralności-sprawdzona sesja i może odrzucać klientów, którzy nie mogą spełnić tego zapotrzebowania. Alternatywnie serwer nie może wymagać niczego i niezależnie od tego, co klient może dostarczyć lub wymaga, jest zwracany w parametrze pfContextAttr.
W przypadku pakietu obsługującego uwierzytelnianie wieloeżne, takie jak uwierzytelnianie wzajemne, sekwencja wywołująca jest następująca:
- Klient przesyła token do serwera.
- Serwer wywołuje metodę AcceptSecurityContext (NTLM) po raz pierwszy, co generuje token odpowiedzi, który jest następnie wysyłany do klienta.
- Klient odbiera token i przekazuje go do elementu InitializeSecurityContext (NTLM). Jeśli funkcja InitializeSecurityContext (NTLM) zwraca SEC_E_OK, wzajemne uwierzytelnianie zostało ukończone i można rozpocząć bezpieczną sesję. Jeśli funkcja InitializeSecurityContext (NTLM) zwraca kod błędu, negocjacje wzajemnego uwierzytelniania kończą się. W przeciwnym razie token zabezpieczający zwrócony przez element InitializeSecurityContext (NTLM) jest wysyłany do klienta, a kroki 2 i 3 są powtarzane.
- Nie używaj wartości phContext w wywołaniach współbieżnych do metody AcceptSecurityContext (NTLM). Implementacja dostawców zabezpieczeń nie jest bezpieczna wątkowo.
Parametry fContextReqreq i pfContextAttr to maski bitów reprezentujące różne atrybuty kontekstu. Aby uzyskać opis różnych atrybutów, zobacz Wymagania dotyczące kontekstu.
Uwaga
Parametr pfContextAttr jest prawidłowy dla każdego pomyślnego powrotu, ale tylko w przypadku końcowego pomyślnego powrotu należy zbadać flagi odnoszące się do aspektów zabezpieczeń kontekstu. Zwroty pośrednie mogą na przykład ustawić flagę ISC_RET_ALLOCATED_MEMORY.
Obiekt wywołujący jest odpowiedzialny za określenie, czy ostateczne atrybuty kontekstu są wystarczające. Jeśli na przykład zażądano poufności (szyfrowania), ale nie można go ustanowić, niektóre aplikacje mogą zdecydować się na natychmiastowe zamknięcie połączenia. Jeśli nie można ustanowić kontekstu zabezpieczeń , serwer musi zwolnić częściowo utworzony kontekst, wywołując funkcję DeleteSecurityContext. Aby uzyskać informacje o tym, kiedy wywołać funkcję DeleteSecurityContext, zobacz DeleteSecurityContext.
Po ustanowieniu kontekstu zabezpieczeń aplikacja serwera może użyć funkcji QuerySecurityContextToken, aby pobrać dojście do konta użytkownika, do którego został zamapowany certyfikat klienta. Ponadto serwer może użyć funkcji ImpersonateSecurityContext, aby personifikować użytkownika.
Wymagania
| Wymaganie | Wartość |
|---|---|
| Minimalny obsługiwany klient | Windows XP [tylko aplikacje klasyczne] |
| Minimalny obsługiwany serwer | Windows Server 2003 [tylko aplikacje klasyczne] |
| Nagłówek | Sspi.h (include Security.h) |
| Biblioteka | Secur32.lib |
| DLL | Secur32.dll |