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 (Digest) umożliwia składnikowi serwera aplikacji transportowej ustanowienie kontekstu zabezpieczeń między serwerem a klientem zdalnym. Klient zdalny używa funkcji InitializeSecurityContext (Digest) w celu rozpoczęcia procesu 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 ptsExpiry
);
Parametry
phCredential (poświadczenie)[in, optional]
Dojście do poświadczeń serwera. Serwer wywołuje funkcję AcquireCredentialsHandle (Digest) z flagą SECPKG_CRED_INBOUND lub SECPKG_CRED_BOTH ustawioną w celu pobrania tego uchwytu.
phContext
Wskaźnik do struktury CtxtHandle. Przy pierwszym wywołaniu AcceptSecurityContext (Skrót)ten wskaźnik jest 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 AcceptSecurityContext (Szyfrowane). 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 w celu InitializeSecurityContext (Digest) zawierający deskryptor buforu wejściowego.
W poniższej tabeli przedstawiono konfigurację buforu dla skrótu HTTP. Pierwszy bufor musi być typu SECBUFFER_TOKEN, a reszta musi być typu SECBUFFER_PKG_PARAMS. SasL wymaga tylko zera buforu.
| Typ buforu #/buforu | Znaczenie |
|---|---|
|
0 SECBUFFER_TOKEN |
Puste dla pierwszego wywołania i odpowiedzi na żądanie odebrane od klienta na drugie wywołanie. |
|
1 SECBUFFER_PKG_PARAMS |
Metoda. Znaki są formatem linii przewodowej z wiersza żądania. Znaki jedno bajtowe US ASCII. |
|
2 SECBUFFER_PKG_PARAMS |
Zastrzeżony. |
|
3 SECBUFFER_PKG_PARAMS |
ONnity. Reprezentacja szesnastkowa H(entity-body). Znaki jedno bajtowe US ASCII. |
|
4 SECBUFFER_PKG_PARAMS |
Obszaru. Ciąg obszaru dla wyzwania. Ciąg Unicode, który musi być reprezentowany w us ASCII. |
|
5 | SECBUFFER_CHANNEL_BINDINGSSECBUFFER_READONLY |
Zawiera wartość tokenu powiązania kanału. Windows Server 2008, Windows Vista, Windows Server 2003 i Windows XP: Ta wartość nie jest obsługiwana. |
fContextReq (Żądanie 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 przydziela 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. 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_PROXY_BINDINGS | Wskazuje, że skrót wymaga powiązania kanału. Ta wartość wzajemnie wyklucza się z ASC_REQ_ALLOW_MISSING_BINDINGS. Windows Server 2008, Windows Vista, Windows Server 2003 i Windows XP: Ta wartość nie jest obsługiwana. |
| ASC_REQ_CONNECTION | Kontekst zabezpieczeń nie będzie obsługiwał formatowania komunikatów. |
| 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. |
| 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 (Przedstawiciel docelowy)[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 skrótem dostawcy usług udostępnionych. W przypadku korzystania z dostawcy SSP skrótu określ zero dla tego parametru.
phNewContext (Kontekst Nowy)[in, out, optional]
Wskaźnik do struktury CtxtHandle. Przy pierwszym wywołaniu metody AcceptSecurityContext (Digest)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ń InitializeSecurityContext (Digest). 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.
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.
Nuta
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 i wartości | Opis |
|---|---|
SEC_E_INSUFFICIENT_MEMORY0x80090300L |
Funkcja nie powiodła się. Za mało pamięci, aby ukończyć żądaną akcję. |
SEC_E_INTERNAL_ERROR0x80090304L |
Funkcja nie powiodła się. Wystąpił błąd, który nie został zamapowyny na kod błędu interfejsu SSPI. |
SEC_E_INVALID_HANDLE0x80100003L |
Funkcja nie powiodła się. Dojście przekazane do funkcji jest nieprawidłowe. |
SEC_E_INVALID_TOKEN0x80090308L |
Funkcja nie powiodła się. Token przekazany do funkcji jest nieprawidłowy. |
SEC_E_LOGON_DENIED0x8009030CL |
Logowanie nie powiodło się. |
SEC_E_NO_AUTHENTICATING_AUTHORITY0x80090311L |
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 niepoprawna. -Domena jest niedostępna. -Relacja zaufania nie powiodła się. |
SEC_E_NO_CREDENTIALS0x8009030EL |
Funkcja nie powiodła się. Poświadczenia obsługiwane w parametrze phCredential są nieprawidłowe. |
SEC_E_OK0x00000000L |
Funkcja zakończyła się pomyślnie. kontekst zabezpieczeń 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_FAILED0x80090332L |
Funkcja nie powiodła się. Flaga atrybutu kontekstu, która nie jest prawidłowa, została określona w parametrze fContextReq. |
SEC_I_COMPLETE_AND_CONTINUE0x00090314L |
Funkcja zakończyła się pomyślnie. Serwer musi wywołać CompleteAuthToken i przekazać token wyjściowy do klienta. Następnie serwer czeka na token powrotny od klienta, a następnie wykonuje kolejne wywołanie AcceptSecurityContext (Skrót). |
SEC_I_COMPLETE_NEEDED0x00090313L |
Funkcja zakończyła się pomyślnie. Serwer musi zakończyć tworzenie komunikatu od klienta, a następnie wywołać funkcję CompleteAuthToken. |
SEC_I_CONTINUE_NEEDED0x00090312L |
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 (Digest). |
STATUS_LOGON_FAILURE0xC000006DL |
Funkcja nie powiodła się. Funkcja AcceptSecurityContext (Digest) została wywołana po ustanowieniu określonego kontekstu. |
SEC_E_BAD_BINDINGS0x80090346L |
Funkcja nie powiodła się. Zasady powiązania kanału nie zostały spełnione. |
Uwagi
Funkcja AcceptSecurityContext (Digest) jest odpowiednikiem serwera InitializeSecurityContext (Digest).
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 AcceptSecurityContext (Skrót) po raz pierwszy, co generuje token odpowiedzi, który jest następnie wysyłany do klienta.
- Klient odbiera token i przekazuje go do InitializeSecurityContext (Digest). Jeśli InitializeSecurityContext (Digest) zwraca SEC_E_OK, wzajemne uwierzytelnianie zostało ukończone i można rozpocząć bezpieczną sesję. Jeśli InitializeSecurityContext (Skrót) zwraca kod błędu, negocjacje wzajemnego uwierzytelniania kończą się. W przeciwnym razie token zabezpieczający zwrócony przez InitializeSecurityContext (Szyfrowany) 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 (Skrót). 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.
Nuta
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 (w tym Security.h) |
| Biblioteka | Secur32.lib powiedział: |
| DLL | Secur32.dll |