Funzione AcceptSecurityContext (CredSSP)
La funzione AcceptSecurityContext (CredSSP) 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 chiama la funzione InitializeSecurityContext (CredSSP) 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.
Sintassi
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
);
Parametri
phCredential [in, optional]
Handle per le credenziali del server. Per recuperare questo handle, il server chiama la funzione AcquireCredentialsHandle (CredSSP) con il flag SECPKG_CRED_INBOUND o SECPKG_CRED_BOTH impostato.
phContext [in, optional]
Puntatore a una struttura CtxtHandle . Nella prima chiamata a AcceptSecurityContext (CredSSP), questo puntatore è NULL
. Nelle chiamate successive, phContext specifica il contesto parzialmente formato restituito nel parametro phNewContext dalla prima chiamata.
Avviso
Non usare lo stesso handle di contesto nelle chiamate simultanee a AcceptSecurityContext (CredSSP).Do not use the same context handle in concurrent calls to AcceptSecurityContext (CredSSP). 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 (CredSSP). La struttura contiene il descrittore del buffer di input.
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.
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 | Il provider di supporto per la sicurezza delle credenziali (CredSSP) allocherà i buffer di output. Al termine dell'uso dei buffer di output, liberarli chiamando la funzione FreeContextBuffer . |
ASC_REQ_CONNECTION | Il contesto di sicurezza non gestirà i messaggi di formattazione. |
ASC_REQ_DELEGATE | Il server può rappresentare il client. Ignorare questo flag per la delega vincolata. |
ASC_REQ_EXTENDED_ERROR | Quando si verificano errori, l'entità remota riceverà una notifica. |
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 al flusso. |
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.
phNewContext [in, out, optional]
Puntatore a una struttura CtxtHandle . Nella prima chiamata a AcceptSecurityContext (CredSSP) questo puntatore riceve il nuovo handle di contesto. Nelle chiamate successive, phNewContext può essere uguale all'handle specificato nel parametro phContext.
pOutput [in, out, optional]
Puntatore a una struttura SecBufferDesc che contiene il descrittore del buffer di output. Questo buffer viene inviato al client per l'input in chiamate aggiuntive a InitializeSecurityContext (CredSSP).This buffer is sent to the client for input into additional calls to InitializeSecurityContext (CredSSP). È possibile generare un buffer di output anche se la funzione restituisce SEC_E_OK. Qualsiasi buffer generato deve essere inviato di nuovo all'applicazione client.
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.
pfContextAttr [out]
Puntatore a 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 verificare la presenza di attributi correlati alla sicurezza fino a quando la chiamata di funzione finale non viene restituita correttamente. I flag di attributo non correlati alla sicurezza, ad esempio il flag ASC_RET_ALLOCATED_MEMORY, possono essere controllati prima della restituzione finale.
ptsExpiry [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 nell'ora locale.
Nota
Fino all'ultima chiamata del processo di autenticazione, la scadenza del contesto può essere errata perché verranno fornite altre informazioni 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 restituito | Descrizione |
---|---|
SEC_E_INCOMPLETE_MESSAGE 0x80090318L |
Funzione completata. I dati nel buffer di input sono incompleti. L'applicazione deve leggere dati aggiuntivi dal client e chiamare di nuovo AcceptSecurityContext (CredSSP). |
SEC_E_INSUFFICIENT_MEMORY 0x80090300L |
La funzione non è riuscita. Memoria insufficiente per completare l'azione richiesta. |
SEC_E_INTERNAL_ERROR 0x80090304L |
La funzione non è riuscita. Si è verificato un errore che non è stato mappato 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 |
Accesso non riuscito. |
SEC_E_NO_AUTHENTICATING_AUTHORITY 0x80090311L |
La funzione non è riuscita. Non è stato possibile contattare alcuna autorità per l'autenticazione. Ciò potrebbe essere dovuto alle condizioni seguenti:
|
SEC_E_NO_CREDENTIALS 0x8009030EL |
La funzione non è riuscita. L'handle delle credenziali specificato nel parametro phCredential non è valido. |
SEC_E_OK 0x00000000L |
Funzione completata. Il contesto di sicurezza ricevuto dal client è stato accettato. Se la funzione ha generato un token di output, il token deve essere inviato al processo client. |
SEC_E_UNSUPPORTED_FUNCTION 0x80090302L |
La funzione non è riuscita. Il parametro fContextReq ha specificato un flag di attributo di contesto (ASC_REQ_DELEGATE o ASC_REQ_PROMPT_FOR_CREDS) non valido. |
SEC_I_COMPLETE_AND_CONTINUE 0x00090314L |
Funzione completata. Il server deve chiamare CompleteAuthToken e passare il token di output al client. Il server deve quindi attendere un token restituito dal client prima di effettuare un'altra chiamata a AcceptSecurityContext (CredSSP). |
SEC_I_COMPLETE_NEEDED 0x00090313L |
Funzione completata. Il server deve completare la compilazione del messaggio dal client prima di chiamare 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 (CredSSP). |
Osservazioni:
La funzione AcceptSecurityContext (CredSSP) è la controparte server della funzione InitializeSecurityContext (CredSSP).
Quando il server riceve una richiesta da un client, usa il parametro fContextReq per specificare ciò che richiede della sessione. In questo modo, un server può richiedere che i client siano in grado di usare una sessione riservata o controllata dall'integrità. Può rifiutare i client che non possono soddisfare tale richiesta. In alternativa, un server non può richiedere nulla; indipendentemente dal fatto che il client richieda o possa fornire, viene restituito nel parametro pfContextAttr .
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
Anche se il parametro pfContextAttr è valido in caso di restituzione riuscita, è necessario esaminare i flag relativi agli aspetti di sicurezza del contesto solo sulla restituzione finale riuscita. I valori restituiti 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. Ad esempio, se è 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 Vista [solo app desktop] |
Server minimo supportato | Windows Server 2008 [solo app desktop] |
Intestazione | Sspi.h (include Security.h) |
Libreria | Secur32.lib |
DLL | Secur32.dll |