Udostępnij przez


AcceptSecurityContext (General), funkcja

Funkcja AcceptSecurityContext (Ogólne) umożliwia składnikowi serwera aplikacji transportowej ustanowienie kontekstu zabezpieczeń między serwerem a klientem zdalnym. Klient zdalny używa funkcji InitializeSecurityContext (Ogólne), 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ń.

Aby uzyskać informacje o korzystaniu z tej funkcji z określonym dostawcą obsługi zabezpieczeń (SSP), zobacz następujące tematy.

Temat Opis
AcceptSecurityContext (CredSSP) Umożliwia składnikowi serwera aplikacji transportowej ustanowienie kontekstu zabezpieczeń między serwerem a klientem zdalnym przy użyciu dostawcy obsługi zabezpieczeń poświadczeń (CredSSP).
AcceptSecurityContext (skrót) Umożliwia składnikowi serwera aplikacji transportowej ustanowienie kontekstu zabezpieczeń między serwerem a klientem zdalnym używającym skrótu.
AcceptSecurityContext (Kerberos) Umożliwia składnikowi serwera aplikacji transportowej ustanowienie kontekstu zabezpieczeń między serwerem a klientem zdalnym korzystającym z protokołu Kerberos.
AcceptSecurityContext (Negotiate) Umożliwia składnikowi serwera aplikacji transportowej ustanowienie kontekstu zabezpieczeń między serwerem a klientem zdalnym korzystającym z negocjacji.
AcceptSecurityContext (NTLM) Umożliwia składnikowi serwera aplikacji transportowej ustanowienie kontekstu zabezpieczeń między serwerem a klientem zdalnym korzystającym z protokołu NTLM.
AcceptSecurityContext (Schannel) Umożliwia składnikowi serwera aplikacji transportowej ustanowienie kontekstu zabezpieczeń między serwerem a klientem zdalnym korzystającym z kanału Schannel.

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     ptsExpiry
);

Parametry

phCredential[in, optional]

Dojście do poświadczeń serwera. Serwer wywołuje funkcję AcquireCredentialsHandle (Ogólne) z flagą SECPKG_CRED_INBOUND lub SECPKG_CRED_BOTH ustawioną w celu pobrania tego uchwytu.

[in, out]phContext

Wskaźnik do struktury CtxtHandle. W pierwszym wywołaniu metody AcceptSecurityContext (Ogólne) 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 dojścia kontekstu w wywołaniach współbieżnych do elementu AcceptSecurityContext (ogólne). 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 (Ogólne), który zawiera deskryptor buforu wejściowego.

W przypadku korzystania z dostawcy SSP Schannel pierwszy bufor musi być typu SECBUFFER_TOKEN i zawierać token zabezpieczający otrzymany od klienta. Drugi bufor powinien być typu SECBUFFER_EMPTY.

W przypadku korzystania z protokołu Negotiate, Kerberos lub NTLM SSPs 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_ALLOCATE_MEMORY Skrót i Schannel przydzielą wyjściowe. Po zakończeniu korzystania z wyjściowych zwolnij je, wywołując funkcję FreeContextBuffer .
ASC_REQ_ALLOW_MISSING_BINDINGS Wskazuje, że skrót nie wymaga powiązań kanałów zarówno dla kanałów wewnętrznych, jak i zewnętrznych. Ta wartość jest używana do zapewnienia zgodności z poprzednimi wersjami, gdy obsługa powiązania kanału punktu końcowego nie jest znana.
Ta wartość wzajemnie wyklucza się z ASC_REQ_PROXY_BINDINGS.
Ta wartość jest obsługiwana tylko przez dostawcę usług udostępnionych skrótów.
Windows Server 2008, Windows Vista, Windows Server 2003 i Windows XP: Ta wartość nie jest obsługiwana.
ASC_REQ_CONFIDENTIALITY Szyfruj i odszyfruj komunikaty.
Skrót dostawcy usług udostępnionych obsługuje tę flagę tylko dla sygnatury dostępu współdzielonego.
ASC_REQ_CONNECTION Kontekst zabezpieczeń nie obsługuje formatowania komunikatów.
ASC_REQ_DELEGATE Serwer może personifikować klienta. Prawidłowe dla protokołu Kerberos. Ignoruj tę flagę dla ograniczonego delegowania.
ASC_REQ_EXTENDED_ERROR Gdy wystąpią błędy, strona zdalna zostanie powiadomiona.
ASC_REQ_HTTP (0x10000000) Użyj skrótu dla protokołu HTTP. Pomiń tę flagę, aby użyć skrótu jako mechanizmu SASL.
ASC_REQ_INTEGRITY Podpisz wiadomości i zweryfikuj podpisy.
Schannel nie obsługuje tej flagi.
ASC_REQ_MUTUAL_AUTH Klient jest wymagany do dostarczenia certyfikatu do użycia na potrzeby uwierzytelniania klienta.
Ta flaga jest obsługiwana tylko przez usługę Schannel.
ASC_REQ_PROXY_BINDINGS Wskazuje, że skrót wymaga powiązania kanału.
Ta wartość wzajemnie wyklucza się z ASC_REQ_ALLOW_MISSING_BINDINGS.
Ta wartość jest obsługiwana tylko przez dostawcę usług udostępnionych skrótów.
Windows Server 2008, Windows Vista, Windows Server 2003 i Windows XP: Ta wartość nie jest obsługiwana.
ASC_REQ_REPLAY_DETECT Wykryj ponownie odtwarzane pakiety.
ASC_REQ_SEQUENCE_DETECT Wykrywanie komunikatów odebranych z sekwencji.
ASC_REQ_STREAM Obsługa połączenia zorientowanego na strumień.
Ta flaga jest obsługiwana tylko przez usługę Schannel.

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.

Ten parametr nie jest używany z Schannel ani szyfrowane dostawcy SSP. Jeśli używasz Schannel lub skrótów SSPs, określ zero dla tego parametru.

phNewContext[in, out, optional]

Wskaźnik do struktury CtxtHandle. Przy pierwszym wywołaniu metody AcceptSecurityContext (Ogólne) ten wskaźnik odbiera 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 (Ogólne). 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.

W przypadku korzystania z kanału Schannel na danych wyjściowych ten bufor odbiera token dla kontekstu zabezpieczeń. Token musi zostać wysłany do klienta. Funkcja może również zwrócić bufor typu SECBUFFER_EXTRA. Ponadto obiekt wywołujący musi przekazać bufor typu SECBUFFER_ALERT. Po wygenerowaniu alertu ten bufor zawiera informacje o tym alercie, a funkcja kończy się niepowodzeniem.

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.

Ten parametr jest ustawiony na stały maksymalny czas. Nie ma czasu wygaśnięcia dla kontekstu zabezpieczeńs lub poświadczeń lub w przypadku korzystania z dostawcy SSP skrótu.

Jest to opcjonalne w przypadku korzystania z dostawcy SSP Schannel. Gdy strona zdalna dostarczyła certyfikat do użycia do uwierzytelniania, ten parametr otrzymuje czas wygaśnięcia dla tego certyfikatu. Jeśli certyfikat nie został dostarczony, zwracana jest maksymalna wartość czasu.

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ściOpis
SEC_E_BAD_BINDINGS
0x80090346L
Funkcja nie powiodła się. Zasady powiązania kanału nie zostały spełnione.
SEC_E_INCOMPLETE_MESSAGE
0x80090318L
Funkcja zakończyła się pomyślnie. Dane w buforze wejściowym są niekompletne. Aplikacja musi odczytywać dodatkowe dane od klienta i ponownie wywołać metodę [AcceptSecurityContext (Ogólne)](acceptsecuritycontext--general.md).
Tę wartość można zwrócić podczas korzystania z dostawcy SSP Schannel. Aby uzyskać więcej informacji na temat tej wartości zwracanej, zobacz [AcceptSecurityContext (Schannel)](acceptsecuritycontext--schannel.md).
SEC_E_INSUFFICIENT_MEMORY
0x80090300L
Funkcja nie powiodła się. Za mało pamięci, aby ukończyć żądaną akcję.
SEC_E_INTERNAL_ERROR
0x80090304L
Funkcja nie powiodła się. Wystąpił błąd, który nie został zamapowyny na kod błędu interfejsu SSPI.
SEC_E_INVALID_HANDLE
0x80100003L
Funkcja nie powiodła się. Dojście przekazane do funkcji jest nieprawidłowe.
SEC_E_INVALID_TOKEN
0x80090308L
Funkcja nie powiodła się. Token przekazany do funkcji jest nieprawidłowy.
SEC_E_LOGON_DENIED
0x8009030CL
Logowanie nie powiodło się.
SEC_E_NO_AUTHENTICATING_AUTHORITY
0x80090311L
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:
  • Nazwa domeny uwierzytelniania strony jest nieprawidłowa.
  • Domena jest niedostępna.
  • Relacja zaufania nie powiodła się.
SEC_E_NO_CREDENTIALS
0x8009030EL
Funkcja nie powiodła się. Poświadczenia obsługiwane w parametrze phCredential są nieprawidłowe. Tę wartość można zwrócić podczas korzystania z dostawcy usług udostępnionych Skrót lub Schannel.
SEC_E_OK
0x00000000L
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.
SEC_E_SECURITY_QOS_FAILED
0x80090332L
Funkcja nie powiodła się. Flaga atrybutu kontekstu, która nie jest prawidłowa, została określona w parametrze fContextReq. Tę wartość można zwrócić podczas korzystania z dostawcy usług udostępnionych skrótów.
SEC_E_UNSUPPORTED_FUNCTION
0x80090302L
Funkcja nie powiodła się. W parametrze fContextReq określono nieprawidłową flagę atrybutu kontekstu (ASC_REQ_DELEGATE lub ASC_REQ_PROMPT_FOR_CREDS). Tę wartość można zwrócić podczas korzystania z dostawcy SSP Schannel.
SEC_I_COMPLETE_AND_CONTINUE
0x00090314L
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 (Ogólne)](acceptsecuritycontext--general.md).
SEC_I_COMPLETE_NEEDED
0x00090313L
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).
SEC_I_CONTINUE_NEEDED
0x00090312L
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 pInput dla innego wywołania metody [AcceptSecurityContext (Ogólne)](acceptsecuritycontext--general.md).
STATUS_LOGON_FAILURE
0xC000006DL
Funkcja nie powiodła się. Funkcja [AcceptSecurityContext (General)](acceptsecuritycontext--general.md) została wywołana po ustanowieniu określonego kontekstu. Tę wartość można zwrócić podczas korzystania z dostawcy usług udostępnionych skrótów.

Uwagi

Funkcja AcceptSecurityContext (General) jest odpowiednikiem serwera funkcji InitializeSecurityContext (General).

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:

  1. Klient przesyła token do serwera.
  2. Serwer wywołuje metodę AcceptSecurityContext (Ogólne) po raz pierwszy, co generuje token odpowiedzi, który jest następnie wysyłany do klienta.
  3. Klient odbiera token i przekazuje go do elementu InitializeSecurityContext (Ogólne). Jeśli funkcja InitializeSecurityContext (ogólne) zwraca SEC_E_OK, uwierzytelnianie wzajemne zostało ukończone i można rozpocząć bezpieczną sesję. Jeśli funkcja InitializeSecurityContext (Ogólne) zwraca kod błędu, negocjacje wzajemnego uwierzytelniania kończą się. W przeciwnym razie token zabezpieczający zwrócony przez element InitializeSecurityContext (ogólne) jest wysyłany do klienta, a kroki 2 i 3 są powtarzane.
  4. Nie należy używać wartości phContext w wywołaniach współbieżnych do acceptSecurityContext (Ogólne). 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

Zobacz też

funkcji SSPI

DeleteSecurityContext

InitializeSecurityContext (Ogólne)