Condividi tramite


Funzione AcceptSecurityContext (Generale)

La funzione AcceptSecurityContext (Generale) consente al componente server di un'applicazione di trasporto di stabilire un contesto di sicurezza tra il server e un client remoto. Il client remoto usa la funzione InitializeSecurityContext (Generale) per avviare il processo di definizione di un contesto di sicurezza. Il server può richiedere uno o più token di risposta dal client remoto per completare la definizione del contesto di sicurezza.

Per informazioni sull'uso di questa funzione con un provider di supporto per la sicurezza specifico, vedere gli argomenti seguenti.

Argomento Descrizione
AcceptSecurityContext (CredSSP) Consente al componente server di un'applicazione di trasporto di stabilire un contesto di sicurezza tra il server e un client remoto usando il provider di supporto per la sicurezza delle credenziali (CredSSP).
AcceptSecurityContext (digest) Consente al componente server di un'applicazione di trasporto di stabilire un contesto di sicurezza tra il server e un client remoto che usa Digest.
AcceptSecurityContext (Kerberos) Consente al componente server di un'applicazione di trasporto di stabilire un contesto di sicurezza tra il server e un client remoto che usa Kerberos.
AcceptSecurityContext (Negotiate) Consente al componente server di un'applicazione di trasporto di stabilire un contesto di sicurezza tra il server e un client remoto che usa Negotiate.
AcceptSecurityContext (NTLM) Consente al componente server di un'applicazione di trasporto di stabilire un contesto di sicurezza tra il server e un client remoto che usa NTLM.
AcceptSecurityContext (Schannel) Consente al componente server di un'applicazione di trasporto di stabilire un contesto di sicurezza tra il server e un client remoto che usa Schannel.

Sintassi

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

Parametri

phCredential[in, optional]

Handle per le credenziali del server. Il server chiama la funzione AcquireCredentialsHandle (Generale) con il flag SECPKG_CRED_INBOUND o SECPKG_CRED_BOTH impostato per recuperare questo handle.

phContext[in, out]

Puntatore a una struttura CtxtHandle . Nella prima chiamata a AcceptSecurityContext (Generale), questo puntatore è NULL. Nelle chiamate successive , phContext è l'handle per il contesto parzialmente formato restituito nel parametro phNewContext dalla prima chiamata.

Avviso

Non usare lo stesso handle di contesto nelle chiamate simultanee a AcceptSecurityContext (Generale). L'implementazione dell'API nei provider di servizi di sicurezza non è thread-safe.

pInput[in, optional]

Puntatore a una struttura SecBufferDesc generata da una chiamata client a InitializeSecurityContext (Generale) che contiene il descrittore del buffer di input.

Quando si usa il provider di servizi condivisi Schannel, il primo buffer deve essere di tipo SECBUFFER_TOKEN e contenere il token di sicurezza ricevuto dal client. Il secondo buffer deve essere di tipo SECBUFFER_EMPTY.

Quando si usano gli SSP Negotiate, Kerberos o NTLM, è possibile specificare le informazioni di associazione del canale passando una struttura SecBuffer di tipo SECBUFFER_CHANNEL_BINDINGS oltre ai buffer generati dalla chiamata alla funzione InitializeSecurityContext (Generale). Le informazioni sull'associazione di canale per il buffer di associazione del canale possono essere ottenute chiamando la funzione QueryContextAttributes (Schannel) nel contesto Schannel del client usato per l'autenticazione.

fContextReq[in]

Flag di bit che specificano gli attributi richiesti dal server per stabilire il contesto. I flag di bit possono essere combinati usando operazioni OR bit per bit. Questo parametro può essere uno o più dei valori seguenti.

Valore Significato
ASC_REQ_ALLOCATE_MEMORY Digest e Schannel allocano i buffer di output. Al termine dell'uso dei buffer di output, liberarli chiamando la funzione FreeContextBuffer .
ASC_REQ_ALLOW_MISSING_BINDINGS Indica che Digest non richiede associazioni di canale sia per i canali interni che per i canali esterni. Questo valore viene usato per la compatibilità con le versioni precedenti quando il supporto per l'associazione del canale dell'endpoint non è noto.
Questo valore si escludono a vicenda con ASC_REQ_PROXY_BINDINGS.
Questo valore è supportato solo dal provider di servizi condivisi digest.
Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Questo valore non è supportato.
ASC_REQ_CONFIDENTIALITY Crittografare e decrittografare i messaggi.
Il provider di servizi condivisi digest supporta questo flag solo per SASL.
ASC_REQ_CONNECTION Il contesto di sicurezza non gestirà i messaggi di formattazione.
ASC_REQ_DELEGATE Il server può rappresentare il client. Valido per Kerberos. Ignorare questo flag per la delega vincolata.
ASC_REQ_EXTENDED_ERROR Quando si verificano errori, l'entità remota riceverà una notifica.
ASC_REQ_HTTP (0x10000000) Usare digest per HTTP. Omettere questo flag per usare Digest come meccanismo SASL.
ASC_REQ_INTEGRITY Firmare i messaggi e verificare le firme.
Schannel non supporta questo flag.
ASC_REQ_MUTUAL_AUTH Il client deve fornire un certificato da usare per l'autenticazione client.
Questo flag è supportato solo da Schannel.
ASC_REQ_PROXY_BINDINGS Indica che Digest richiede l'associazione del canale.
Questo valore si escludono a vicenda con ASC_REQ_ALLOW_MISSING_BINDINGS.
Questo valore è supportato solo dal provider di servizi condivisi digest.
Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Questo valore non è supportato.
ASC_REQ_REPLAY_DETECT Rilevare i pacchetti riprodotti.
ASC_REQ_SEQUENCE_DETECT Rilevare i messaggi ricevuti fuori sequenza.
ASC_REQ_STREAM Supportare una connessione orientata ai flussi.
Questo flag è supportato solo da Schannel.

Per i possibili flag di attributo e i relativi significati, vedere Requisiti di contesto. I flag usati per questo parametro sono preceduti da ASC_REQ, ad esempio ASC_REQ_DELEGATE.

Gli attributi richiesti potrebbero non essere supportati dal client. Per altre informazioni, vedere il parametro pfContextAttr .

TargetDataRep[in]

Rappresentazione dei dati, ad esempio l'ordinamento dei byte, nella destinazione. Questo parametro può essere SECURITY_NATIVE_DREP o SECURITY_NETWORK_DREP.

Questo parametro non viene usato con SCHANNEL o SSP digest. Quando si usano SSP Schannel o Digest, specificare zero per questo parametro.

phNewContext[in, out, optional]

Puntatore a una struttura CtxtHandle . Nella prima chiamata a AcceptSecurityContext (Generale), questo puntatore riceve il nuovo handle di contesto. Nelle chiamate successive , phNewContext può essere uguale all'handle specificato nel parametro phContext . phNewContext non deve mai essere NULL.

pOutput[in, out, optional]

Puntatore a una struttura SecBufferDesc contenente il descrittore del buffer di output. Questo buffer viene inviato al client per l'input in chiamate aggiuntive a InitializeSecurityContext (Generale). Un buffer di output può essere generato anche se la funzione restituisce SEC_E_OK. Qualsiasi buffer generato deve essere inviato nuovamente all'applicazione client.

Quando si usa Schannel, nell'output, questo buffer riceve un token per il contesto di sicurezza. Il token deve essere inviato al client. La funzione può anche restituire un buffer di tipo SECBUFFER_EXTRA. Inoltre, il chiamante deve passare un buffer di tipo SECBUFFER_ALERT. Nell'output, se viene generato un avviso, questo buffer contiene informazioni su tale avviso e la funzione ha esito negativo.

pfContextAttr[out]

Puntatore a una variabile che riceve un set di flag di bit che indicano gli attributi del contesto stabilito. Per una descrizione dei vari attributi, vedere Requisiti di contesto. I flag usati per questo parametro sono preceduti da ASC_RET, ad esempio ASC_RET_DELEGATE.

Non controllare gli attributi correlati alla sicurezza fino a quando la chiamata di funzione finale non restituisce correttamente. I flag di attributo non correlati alla sicurezza, ad esempio il flag ASC_RET_ALLOCATED_MEMORY, possono essere controllati prima della restituzione finale.

ptsTimeStamp[out, optional]

Puntatore a una struttura TimeStamp che riceve l'ora di scadenza del contesto. È consigliabile che il pacchetto di sicurezza restituisca sempre questo valore in ora locale.

Questo parametro è impostato su un tempo massimo costante. Non è previsto alcun periodo di scadenza per il contesto di sicurezzadel digest o le credenziali o quando si usa il provider di servizi di gestione del digest.

Questo è facoltativo quando si usa Schannel SSP. Quando la entità remota ha fornito un certificato da usare per l'autenticazione, questo parametro riceve l'ora di scadenza per tale certificato. Se non è stato specificato alcun certificato, viene restituito un valore di tempo massimo.

Nota

Fino all'ultima chiamata del processo di autenticazione, la scadenza del contesto può essere errata perché altre informazioni verranno fornite durante le fasi successive della negoziazione. Pertanto, ptsTimeStamp deve essere NULL fino all'ultima chiamata alla funzione.

Valore restituito

Questa funzione restituisce uno dei valori seguenti.

Codice/valore restituitoDescrizione
SEC_E_BAD_BINDINGS
0x80090346L
La funzione non è riuscita. I criteri di associazione del canale non sono stati soddisfatti.
SEC_E_INCOMPLETE_MESSAGE
0x80090318L
Funzione completata. I dati nel buffer di input sono incompleti. L'applicazione deve leggere di nuovo dati aggiuntivi dal client e chiamare [AcceptSecurityContext (Generale)](acceptsecuritycontext--general.md).
Questo valore può essere restituito quando si usa Schannel SSP. Per altre informazioni su questo valore restituito, vedere [AcceptSecurityContext (Schannel)](acceptsecuritycontext--schannel.md).
SEC_E_INSUFFICIENT_MEMORY
0x80090300L
La funzione non è riuscita. Non è disponibile memoria sufficiente per completare l'azione richiesta.
SEC_E_INTERNAL_ERROR
0x80090304L
La funzione non è riuscita. Si è verificato un errore che non è stato eseguito il mapping a un codice di errore SSPI.
SEC_E_INVALID_HANDLE
0x80100003L
La funzione non è riuscita. L'handle passato alla funzione non è valido.
SEC_E_INVALID_TOKEN
0x80090308L
La funzione non è riuscita. Il token passato alla funzione non è valido.
SEC_E_LOGON_DENIED
0x8009030CL
L'accesso non è riuscito.
SEC_E_NO_AUTHENTICATING_AUTHORITY
0x80090311L
La funzione non è riuscita. Non è possibile contattare alcuna autorità per l'autenticazione. Ciò potrebbe essere dovuto alle condizioni seguenti:
  • Il nome di dominio della parte di autenticazione non è corretto.
  • Il dominio non è disponibile.
  • La relazione di trust non è riuscita.
SEC_E_NO_CREDENTIALS
0x8009030EL
La funzione non è riuscita. L'handle delle credenziali specificato nel parametro phCredential non è valido. Questo valore può essere restituito quando si usa il provider di servizi di azure digest o Schannel.
SEC_E_OK
0x00000000L
Funzione completata. [*contesto di sicurezza*](.. /secgloss/s-gly.md ricevuti dal client è stato accettato. Se un token di output è stato generato dalla funzione, deve essere inviato al processo client.
SEC_E_SECURITY_QOS_FAILED
0x80090332L
La funzione non è riuscita. Flag di attributo di contesto non valido specificato nel parametro fContextReq . Questo valore può essere restituito quando si usa il provider di servizi di gestione del digest.
SEC_E_UNSUPPORTED_FUNCTION
0x80090302L
La funzione non è riuscita. Un flag di attributo di contesto non valido (ASC_REQ_DELEGATE o ASC_REQ_PROMPT_FOR_CREDS) è stato specificato nel parametro fContextReq . Questo valore può essere restituito quando si usa Schannel SSP.
SEC_I_COMPLETE_AND_CONTINUE
0x00090314L
Funzione completata. Il server deve chiamare [CompleteAuthToken](/windows/win32/api/sspi/nf-sspi-completeauthtoken) e passare il token di output al client. Il server attende quindi un token restituito dal client e quindi effettua un'altra chiamata a [AcceptSecurityContext (Generale)](acceptsecuritycontext--general.md).
SEC_I_COMPLETE_NEEDED
0x00090313L
Funzione completata. Il server deve completare la compilazione del messaggio dal client e quindi chiamare la funzione [CompleteAuthToken](/windows/win32/api/sspi/nf-sspi-completeauthtoken).
SEC_I_CONTINUE_NEEDED
0x00090312L
Funzione completata. Il server deve inviare il token di output al client e attendere un token restituito. Il token restituito deve essere passato in pInput per un'altra chiamata a [AcceptSecurityContext (General)](acceptsecuritycontext--general.md).
STATUS_LOGON_FAILURE
0xC000006DL
La funzione non è riuscita. La funzione [AcceptSecurityContext (General)](acceptsecuritycontext--general.md) è stata chiamata dopo che è stato stabilito il contesto specificato. Questo valore può essere restituito quando si usa il provider di servizi condivisi digest.

Commenti

La funzione AcceptSecurityContext (Generale) è la controparte del server alla funzione InitializeSecurityContext (Generale).

Quando il server riceve una richiesta da un client, il server usa il parametro fContextReq per specificare le richieste della sessione. In questo modo, un server può specificare che i client devono essere in grado di usare una sessione riservata o controllata dall'integrità e possono rifiutare i client che non possono soddisfare tale richiesta. In alternativa, un server non può richiedere nulla e qualsiasi elemento che il client possa fornire o richiede venga restituito nel parametro pfContextAttr .

Per un pacchetto che supporta l'autenticazione a più gambe, ad esempio l'autenticazione reciproca, la sequenza chiamante è la seguente:

  1. Il client trasmette un token al server.
  2. Il server chiama AcceptSecurityContext (Generale) la prima volta, che genera un token di risposta che viene quindi inviato al client.
  3. Il client riceve il token e lo passa a InitializeSecurityContext (Generale).The client receive the token and pass it to InitializeSecurityContext (General). Se InitializeSecurityContext (Generale) restituisce SEC_E_OK, l'autenticazione reciproca è stata completata e può iniziare una sessione sicura. Se InitializeSecurityContext (Generale) restituisce un codice di errore, la negoziazione di autenticazione reciproca termina. In caso contrario, il token di sicurezza restituito da InitializeSecurityContext (Generale) viene inviato al client e i passaggi 2 e 3 vengono ripetuti.
  4. Non usare il valore phContext nelle chiamate simultanee a AcceptSecurityContext (Generale).Do not use the phContext value in concurrent calls to AcceptSecurityContext (General). L'implementazione nei provider di sicurezza non è thread-safe.

I parametri fContextReq e pfContextAttr sono maschera di bit che rappresentano vari attributi di contesto. Per una descrizione dei vari attributi, vedere Requisiti di contesto.

Nota

Il parametro pfContextAttr è valido per qualsiasi risultato restituito correttamente, ma solo sul risultato finale è necessario esaminare i flag relativi agli aspetti di sicurezza del contesto. I valori intermedi possono essere impostati, ad esempio, il flag ISC_RET_ALLOCATED_MEMORY.

Il chiamante è responsabile della determinazione se gli attributi di contesto finali sono sufficienti. Se, ad esempio, è stata richiesta la riservatezza (crittografia), ma non è stato possibile stabilire, alcune applicazioni possono scegliere di arrestare immediatamente la connessione. Se non è possibile stabilire il contesto di sicurezza , il server deve liberare il contesto parzialmente creato chiamando la funzione DeleteSecurityContext . Per informazioni su quando chiamare la funzione DeleteSecurityContext , vedere DeleteSecurityContext.

Dopo aver stabilito il contesto di sicurezza , l'applicazione server può usare la funzione QuerySecurityContextToken per recuperare un handle per l'account utente a cui è stato eseguito il mapping del certificato client. Inoltre, il server può usare la funzione ImpersonateSecurityContext per rappresentare l'utente.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Intestazione Sspi.h (include Security.h)
Libreria Secur32.lib
DLL Secur32.dll

Vedi anche

Funzioni SSPI

DeleteSecurityContext

InitializeSecurityContext (Generale)