Udostępnij przez


AcceptSecurityContext (Digest), funkcja

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_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 niepoprawna.
-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.
SEC_E_OK
0x00000000L
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_FAILED
0x80090332L
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_CONTINUE
0x00090314L
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_NEEDED
0x00090313L
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_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 (Digest).
STATUS_LOGON_FAILURE
0xC000006DL
Funkcja nie powiodła się. Funkcja AcceptSecurityContext (Digest) została wywołana po ustanowieniu określonego kontekstu.
SEC_E_BAD_BINDINGS
0x80090346L
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:

  1. Klient przesyła token do serwera.
  2. Serwer wywołuje AcceptSecurityContext (Skrót) po raz pierwszy, co generuje token odpowiedzi, który jest następnie wysyłany do klienta.
  3. 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.
  4. 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

Zobacz też

funkcji SSPI

DeleteSecurityContext

initializeSecurityContext (skrót)