Funzione InitializeSecurityContextW (sspi.h)
La funzione di InitializeSecurityContext (Generale)
In genere, la funzione InitializeSecurityContext (Generale)
Per informazioni sull'uso di questa funzione con un provider di supporto della sicurezza specifico (SSP), vedere gli argomenti seguenti.
Argomento | Descrizione |
---|---|
InitializeSecurityContext (CredSSP) | Avvia il contesto di sicurezza in uscita sul lato client da un handle di credenziali usando il provider di supporto per la sicurezza delle credenziali (CredSSP). |
InitializeSecurityContext (Digest) | Avvia il contesto di sicurezza in uscita sul lato client da un handle di credenziali usando il pacchetto di sicurezza Digest. |
InitializeSecurityContext (Kerberos) | Avvia il contesto di sicurezza in uscita sul lato client da un handle di credenziali usando il pacchetto di sicurezza Kerberos. |
InitializeSecurityContext (Negotiate) | Avvia il contesto di sicurezza in uscita sul lato client da un handle di credenziali usando il pacchetto di sicurezza Negotiate. |
InitializeSecurityContext (NTLM) | Avvia il contesto di sicurezza in uscita sul lato client da un handle di credenziali usando il pacchetto di sicurezza NTLM. |
InitializeSecurityContext (Schannel) | Avvia il contesto di sicurezza in uscita sul lato client da un handle di credenziali usando il pacchetto di sicurezza Schannel. |
Sintassi
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY InitializeSecurityContextW(
[in, optional] PCredHandle phCredential,
[in, optional] PCtxtHandle phContext,
[in, optional] PSECURITY_STRING pTargetName,
[in] unsigned long fContextReq,
[in] unsigned long Reserved1,
[in] unsigned long TargetDataRep,
[in, optional] PSecBufferDesc pInput,
[in] unsigned long Reserved2,
[in, out, optional] PCtxtHandle phNewContext,
[in, out, optional] PSecBufferDesc pOutput,
[out] unsigned long *pfContextAttr,
[out, optional] PTimeStamp ptsExpiry
);
Parametri
[in, optional] phCredential
Handle per le credenziali restituite da AcquireCredentialsHandle (Generale). Questo handle viene usato per compilare il contesto di sicurezza . La funzione InitializeSecurityContext (Generale)
[in, optional] phContext
Puntatore a una struttura CtxtHandle. Nella prima chiamata a InitializeSecurityContext (Generale), questo puntatore è NULL. Nella seconda chiamata, questo parametro è un puntatore all'handle al contesto parzialmente formato restituito nel phNewContext parametro dalla prima chiamata.
Questo parametro è facoltativo con il provider di servizi condivisi del digest Microsoft e può essere impostato su NULL.
Quando si usa il provider di servizi condivisi Schannel, nella prima chiamata a InitializeSecurityContext (Generale)specificare NULL. Nelle chiamate future specificare il token ricevuto nel parametro phNewContext dopo la prima chiamata a questa funzione.
[in, optional] pTargetName
Puntatore a una stringa con terminazione Null che indica la destinazione del contesto. Il contenuto della stringa è pacchetto di sicurezza specifico, come descritto nella tabella seguente. Questo elenco non è esaustivo. È possibile aggiungere provider di servizi di sicurezza di sistema aggiuntivi e provider di servizi di sicurezza di terze parti a un sistema.
Provider di servizi condivisi in uso | Significato |
---|---|
|
Stringa con terminazione Null che identifica in modo univoco l'URI della risorsa richiesta. La stringa deve essere composta da caratteri consentiti in un URI e deve essere rappresentata dal set di codice ASCII degli Stati Uniti. La codifica percentuale può essere usata per rappresentare caratteri esterni al set di codice ASCII degli Stati Uniti. |
|
nome dell'entità servizio (SPN) o il contesto di sicurezza del server di destinazione. |
|
nome dell'entità servizio (SPN) o il contesto di sicurezza del server di destinazione. |
|
Stringa con terminazione Null che identifica in modo univoco il server di destinazione. Schannel usa questo valore per verificare il certificato del server. Schannel usa anche questo valore per individuare la sessione nella cache della sessione durante la riattivazione di una connessione. La sessione memorizzata nella cache viene usata solo se vengono soddisfatte tutte le condizioni seguenti:
|
[in] fContextReq
Flag di bit che indicano le richieste per il contesto. Non tutti i pacchetti possono supportare tutti i requisiti. I flag usati per questo parametro sono preceduti da ISC_REQ_, ad esempio ISC_REQ_DELEGATE. Questo parametro può essere uno o più dei flag di attributi seguenti.
Valore | Significato |
---|---|
|
Il pacchetto di sicurezza alloca i buffer di output. Al termine dell'uso dei buffer di output, liberarli chiamando la funzione FreeContextBuffer |
|
Crittografare i messaggi usando la funzione EncryptMessage |
|
Il contesto di sicurezza non gestirà i messaggi di formattazione. Questo valore è l'impostazione predefinita per i pacchetti di sicurezza Kerberos, Negotiate e NTLM. |
|
Il server può usare il contesto per eseguire l'autenticazione ad altri server come client. Per il funzionamento di questo flag, è necessario impostare il flag ISC_REQ_MUTUAL_AUTH. Valido per Kerberos. Ignorare questo flag per delega vincolata. |
|
Quando si verificano errori, l'entità remota riceverà una notifica. |
|
Usare digest per HTTP. Omettere questo flag per usare Digest come meccanismo SASL. |
|
Firmare i messaggi e verificare le firme usando le funzioni |
|
Schannel non deve autenticare automaticamente il server. |
|
I criteri di autenticazione reciproca del servizio verranno soddisfatti.
Attenzione Questo non significa necessariamente che venga eseguita l'autenticazione reciproca, ma solo che i criteri di autenticazione del servizio siano soddisfatti. Per assicurarsi che venga eseguita l'autenticazione reciproca, chiamare la funzione queryContextAttributes (Generale).
|
|
Se questo flag è impostato, il flag ISC_REQ_INTEGRITY viene ignorato.
Questo valore è supportato solo dai pacchetti di sicurezza Negotiate e Kerberos . |
|
Rilevare i messaggi riprodotti codificati usando le funzioni EncryptMessage |
|
Rilevare i messaggi ricevuti fuori sequenza. |
|
Supportare una connessione orientata al flusso. |
|
È necessario negoziare una nuova chiave di sessione .
Questo valore è supportato solo dal pacchetto di sicurezza Kerberos . |
|
Schannel non deve tentare di fornire automaticamente le credenziali per il client. |
Gli attributi richiesti potrebbero non essere supportati dal client. Per altre informazioni, vedere il parametro pfContextAttr.
Per altre descrizioni dei vari attributi, vedere requisiti di contesto .
[in] Reserved1
Questo parametro è riservato e deve essere impostato su zero.
[in] TargetDataRep
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 Digest o Schannel. Impostarlo su zero.
[in, optional] pInput
Puntatore a una struttura secBufferDesc di
[in] Reserved2
Questo parametro è riservato e deve essere impostato su zero.
[in, out, optional] phNewContext
Puntatore a una struttura CtxtHandle. Nella prima chiamata a InitializeSecurityContext (Generale), questo puntatore riceve il nuovo handle di contesto. Nella seconda chiamata phNewContext può essere uguale all'handle specificato nel parametro phContext.
Quando si usa il provider di servizi condivisi Schannel, alle chiamate dopo la prima chiamata passare l'handle restituito qui come parametro phContext e specificare NULL per phNewContext.
[in, out, optional] pOutput
Puntatore a una struttura SecBufferDesc
Quando si usa il provider di servizi condivisi Microsoft Digest, questo parametro riceve la risposta di verifica che deve essere inviata al server.
Quando si usa il provider di servizi condivisi Schannel, se viene specificato il flag ISC_REQ_ALLOCATE_MEMORY, il provider di servizi condivisi Schannel allocherà la memoria per il buffer e inserisce le informazioni appropriate nel SecBufferDesc. Inoltre, il chiamante deve passare un buffer di tipo SECBUFFER_ALERT. In caso di output, se viene generato un avviso, questo buffer contiene informazioni sull'avviso e la funzione ha esito negativo.
[out] pfContextAttr
Puntatore a una variabile per ricevere 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 ISC_RET, ad esempio ISC_RET_DELEGATE.
Per un elenco di valori validi, vedere il parametro fContextReq.
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.
[out, optional] ptsExpiry
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. Questo parametro è facoltativo e NULL deve essere passato per i client di breve durata.
Non è prevista alcuna scadenza per i contesti di sicurezza del provider di servizi condivisi del digest Microsoft o le credenziali .
Valore restituito
Se la funzione ha esito positivo, la funzione restituisce uno dei codici di esito positivo seguenti.
Codice restituito | Descrizione |
---|---|
|
Il client deve chiamare CompleteAuthToken e quindi passare l'output al server. Il client attende quindi un token restituito e lo passa, in un'altra chiamata, per InitializeSecurityContext (Generale). |
|
Il client deve completare la compilazione del messaggio e quindi chiamare la funzione CompleteAuthToken |
|
Il client deve inviare il token di output al server e attendere un token restituito. Il token restituito viene quindi passato in un'altra chiamata a InitializeSecurityContext (Generale). Il token di output può essere vuoto. |
|
Usare con Schannel. Il server ha richiesto l'autenticazione client e le credenziali fornite non includono un certificato o il certificato non è stato emesso da un'autorità di certificazione attendibile dal server. Per altre informazioni, vedere Osservazioni. |
|
Usare con Schannel. I dati per l'intero messaggio non sono stati letti dalla rete.
Quando viene restituito questo valore, il buffer |
|
La contesto di sicurezza è stata inizializzata correttamente. Non è necessario un'altra chiamata InitializeSecurityContext (Generale) |
Se la funzione ha esito negativo, la funzione restituisce uno dei codici di errore seguenti.
Osservazioni
Il chiamante è responsabile della determinazione se gli attributi di contesto finali sono sufficienti. Se, ad esempio, è stata richiesta la riservatezza, ma non è stato possibile stabilire, alcune applicazioni possono scegliere di arrestare immediatamente la connessione.
Se gli attributi del contesto di sicurezza non sono sufficienti, il client deve liberare il contesto parzialmente creato chiamando la funzione DeleteSecurityContext
La funzione InitializeSecurityContext (Generale)
Per un contesto di sicurezza a due gambe, la sequenza chiamante è la seguente:
- Il client chiama la funzione con phContext impostata su NULL e riempie il descrittore del buffer con il messaggio di input.
- Il pacchetto di sicurezza esamina i parametri e costruisce un token opaco, inserendolo nell'elemento TOKEN nella matrice di buffer. Se il parametro fContextReq
include il flag di ISC_REQ_ALLOCATE_MEMORY, il pacchetto di sicurezza alloca la memoria e restituisce il puntatore nell'elemento TOKEN. - Il client invia il token restituito nel pOutput buffer al server di destinazione. Il server passa quindi il token come argomento di input in una chiamata alla funzione
AcceptSecurityContext (Generale). - AcceptSecurityContext (Generale) può restituire un token, che il server invia al client per una seconda chiamata a InitializeSecurityContext (Generale) se la prima chiamata ha restituito SEC_I_CONTINUE_NEEDED.
- Il client chiama la funzione come descritto in precedenza, ma il pacchetto restituisce il SEC_I_CONTINUE_NEEDED codice di operazione riuscita.
- Il client invia il token di output al server e attende la risposta del server.
- Dopo aver ricevuto la risposta del server, il client chiama nuovamente InitializeSecurityContext (Generale), con phContext impostato sull'handle restituito dall'ultima chiamata. Il token ricevuto dal server viene fornito nel parametro
pInput.
Se la funzione restituisce una delle risposte di errore, la risposta del server non viene accettata e la sessione non viene stabilita.
Se la funzione restituisce SEC_I_CONTINUE_NEEDED, SEC_I_COMPLETE_NEEDED o SEC_I_COMPLETE_AND_CONTINUE, i passaggi 2 e 3 vengono ripetuti.
Per inizializzare un contesto di sicurezza , potrebbe essere necessaria più di una chiamata a questa funzione, a seconda del meccanismo di autenticazione sottostante e delle scelte specificate nel parametro fContextReq.
I fContextReq e pfContextAttributes parametri sono maschera di bit che rappresentano vari attributi di contesto. Per una descrizione dei vari attributi, vedere requisiti di contesto . Il pfContextAttributes parametro è valido per qualsiasi restituzione riuscita, ma solo in caso di esito positivo finale, è necessario esaminare i flag relativi agli aspetti di sicurezza del contesto. I valori restituiti intermedi possono essere impostati, ad esempio, il flag ISC_RET_ALLOCATED_MEMORY.
Se il flag di ISC_REQ_USE_SUPPLIED_CREDS è impostato, il pacchetto di sicurezza deve cercare un tipo di buffer SECBUFFER_PKG_PARAMS nel buffer di input pInput. Questa non è una soluzione generica, ma consente un'associazione avanzata di pacchetti di sicurezza e applicazione quando appropriato.
Se è stato specificato ISC_REQ_ALLOCATE_MEMORY, il chiamante deve liberare la memoria chiamando la funzione
Ad esempio, il token di input potrebbe essere la sfida di un gestore LAN. In questo caso, il token di output sarà la risposta crittografata NTLM alla richiesta.
L'azione eseguita dal client dipende dal codice restituito da questa funzione. Se il codice restituito è SEC_E_OK, non sarà previsto alcun secondo InitializeSecurityContext (Generale) e non è prevista alcuna risposta dal server. Se il codice restituito è SEC_I_CONTINUE_NEEDED, il client prevede un token in risposta dal server e lo passa in una seconda chiamata a InitializeSecurityContext (Generale). Il codice restituito SEC_I_COMPLETE_NEEDED indica che il client deve completare la compilazione del messaggio e chiamare la funzione CompleteAuthToken
Se InitializeSecurityContext (Generale) restituisce l'esito positivo della prima chiamata (o solo), il chiamante deve infine chiamare la funzione DeleteSecurityContext sull'handle restituito, anche se la chiamata non riesce in una fase successiva dello scambio di autenticazione.
Il client può chiamare InitializeSecurityContext (Generale) di nuovo dopo il completamento. Indica al pacchetto di sicurezza che è necessario eseguire di nuovo l'autenticazione.
I chiamanti in modalità kernel presentano le differenze seguenti: il nome di destinazione è una stringa Unicode
Quando si usa il provider di servizi condivisi Schannel, se la funzione restituisce SEC_I_INCOMPLETE_CREDENTIALS, verificare di aver specificato un certificato valido e attendibile nelle credenziali. Il certificato viene specificato quando si chiama la funzione
Quando si usa il provider di servizi condivisi Schannel, dopo che un'applicazione client riceve un certificato di autenticazione da una CA considerata attendibile dal server, l'applicazione crea una nuova credenziale chiamando la funzione
Nota
L'intestazione sspi.h definisce InitializeSecurityContext come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows XP [solo app desktop] |
server minimo supportato | Windows Server 2003 [solo app desktop] |
piattaforma di destinazione | Finestre |
intestazione |
sspi.h (include Security.h) |
libreria |
Secur32.lib |
dll | Secur32.dll |
Vedere anche
AcceptSecurityContext (Generale)