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 (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ści | Opis |
|---|---|
| Funkcja nie powiodła się. Zasady powiązania kanału nie zostały spełnione. |
| 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). |
| 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 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. |
| 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 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. |
| 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. |
| 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). |
| 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 pInput dla innego wywołania metody [AcceptSecurityContext (Ogólne)](acceptsecuritycontext--general.md). |
| 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:
- Klient przesyła token do serwera.
- Serwer wywołuje metodę AcceptSecurityContext (Ogólne) 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 (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.
- 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 |