Udostępnij przez


AcceptSecurityContext (CredSSP), funkcja

Funkcja AcceptSecurityContext (CredSSP) umożliwia składnikowi serwera aplikacji transportowej ustanowienie kontekstu zabezpieczeń między serwerem a klientem zdalnym. Klient zdalny wywołuje funkcję InitializeSecurityContext (CredSSP), 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,
  _In_opt_    PCtxtHandle    phContext,
  _In_opt_    PSecBufferDesc pInput,
  _In_        unsigned long  fContextReq,
  _In_        unsigned long  TargetDataRep,
  _Inout_opt_ PCtxtHandle    phNewContext,
  _Inout_opt_ PSecBufferDesc pOutput,
  _Out_       unsigned long  *pfContextAttr,
  _Out_opt_   PTimeStamp     ptsExpiry
);

Parametry

phCredential (poświadczenie)[in, optional]

Dojście do poświadczeń serwera. Aby pobrać ten uchwyt, serwer wywołuje funkcję AcquireCredentialsHandle (CredSSP) z ustawioną flagą SECPKG_CRED_INBOUND lub SECPKG_CRED_BOTH.

phContext

Wskaźnik do struktury CtxtHandle. W pierwszym wywołaniu metody AcceptSecurityContext (CredSSP) ten wskaźnik to NULL. W kolejnych wywołaniach fraza phContext określa częściowo sformułowany kontekst zwracany w parametrze phNewContext przez pierwsze wywołanie.

Ostrzeżenie

Nie używaj tego samego uchwytu kontekstu w wywołaniach współbieżnych do elementu AcceptSecurityContext (CredSSP). 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 (CredSSP). Struktura zawiera deskryptor buforu wejściowego.

Pierwszy bufor musi być typu SECBUFFER_TOKEN i zawiera token zabezpieczający otrzymany od klienta. Drugi bufor powinien być typu SECBUFFER_EMPTY.

fContextReq (Żądanie fContextReq)[in]

-Flagi bitowe, które określają 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 Dostawca obsługi zabezpieczeń poświadczeń (CredSSP) przydzieli wyjściowe. Po zakończeniu korzystania z wyjściowych zwolnij je, wywołując funkcję FreeContextBuffer.
ASC_REQ_CONNECTION Kontekst zabezpieczeń nie obsługuje formatowania komunikatów.
ASC_REQ_DELEGATE Serwer może personifikować klienta. Ignoruj tę flagę dla ograniczonego delegowania.
ASC_REQ_EXTENDED_ERROR Gdy wystąpią błędy, strona zdalna zostanie powiadomiona.
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ń.

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.

phNewContext (Kontekst Nowy)[in, out, optional]

Wskaźnik do struktury CtxtHandle. Przy pierwszym wywołaniu metody AcceptSecurityContext (CredSSP) ten wskaźnik otrzymuje nowy uchwyt kontekstu. W kolejnych wywołaniach phNewContext może być taki sam jak uchwyt określony w phContext parametru.

[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 wprowadzenia danych wejściowych do dodatkowych wywołań metody InitializeSecurityContext (CredSSP). 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 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.

pfContextAttr[out]

Wskaźnik do zestawu flag bitowych, które wskazują 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.

ptsWygaśnięcie[out, optional]

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
SEC_E_INCOMPLETE_MESSAGE
0x80090318L
Funkcja zakończyła się pomyślnie. Dane w buforze wejściowym są niekompletne. Aplikacja musi odczytywać dodatkowe dane z klienta i ponownie wywołać metodę AcceptSecurityContext (CredSSP).
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.
SEC_E_OK
0x00000000L
Funkcja zakończyła się pomyślnie. Kontekst zabezpieczeń odebrany od klienta został zaakceptowany. Jeśli funkcja wygenerowała token wyjściowy, token musi zostać wysłany do procesu klienta.
SEC_E_UNSUPPORTED_FUNCTION
0x80090302L
Funkcja nie powiodła się. Parametr fContextReq określił flagę atrybutu kontekstu (ASC_REQ_DELEGATE lub ASC_REQ_PROMPT_FOR_CREDS), która jest nieprawidłowa.
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. Serwer musi następnie poczekać na token powrotny od klienta przed wykonaniem innego wywołania metody AcceptSecurityContext (CredSSP).
SEC_I_COMPLETE_NEEDED
0x00090313L
Funkcja zakończyła się pomyślnie. Serwer musi zakończyć tworzenie komunikatu od klienta przed wywołaniem metody 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 pliku pInput dla innego wywołania metody AcceptSecurityContext (CredSSP).

Uwagi

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

Gdy serwer odbiera żądanie od klienta, używa parametru fContextReq , aby określić, czego wymaga sesji. W ten sposób serwer może wymagać, aby klienci mogli korzystać z sesji sprawdzanej pod kątem poufności lub integralności; może odrzucać klientów, którzy nie mogą sprostać tym zapotrzebowaniu. Alternatywnie serwer nie może wymagać niczego; niezależnie od tego, czego klient wymaga lub może podać, jest zwracany w parametrze pfContextAttr .

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

Chociaż parametr pfContextAttr jest prawidłowy w przypadku dowolnego pomyślnego powrotu, należy sprawdzić flagi odnoszące się do aspektów zabezpieczeń kontekstu tylko w przypadku końcowego pomyślnego powrotu. 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ą natychmiast zamknąć połączenie. 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ć uchwyt 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 Vista [tylko aplikacje klasyczne]
Minimalny obsługiwany serwer Windows Server 2008 [tylko aplikacje klasyczne]
Nagłówek Sspi.h (w tym Security.h)
Biblioteka Secur32.lib powiedział:
DLL Secur32.dll

Zobacz też