AcceptSecurityContext (Schannel) işlevi

AcceptSecurityContext (Schannel) işlevi, bir aktarım uygulamasının sunucu bileşeninin sunucu ile uzak istemci arasında bir güvenlik bağlamı oluşturmasını sağlar. Uzak istemci, bir güvenlik bağlamı oluşturma işlemini başlatmak için InitializeSecurityContext (Schannel) işlevini kullanır. Sunucu, güvenlik bağlamını oluşturma işlemini tamamlamak için uzak istemciden bir veya daha fazla yanıt belirteci gerektirebilir.

Sözdizimi

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

Parametreler

phCredential[in, optional]

Sunucunun kimlik bilgilerinin tanıtıcısı. Sunucu, bu tanıtıcıyı almak için ayarlanmış SECPKG_CRED_INBOUND veya SECPKG_CRED_BOTH bayrağıyla AcquireCredentialsHandle (Schannel) işlevini çağırır.

phContext [in, out, optional]

CtxtHandle yapısının işaretçisi. AcceptSecurityContext 'e (Schannel) yapılan ilk çağrıda, bu işaretçi olurNULL. Sonraki çağrılarda, phContext , ilk çağrı tarafından phNewContext parametresinde döndürülen kısmen biçimlendirilmiş bağlamın tanıtıcısıdır.

Uyarı

AcceptSecurityContext'e (Schannel) yapılan eşzamanlı çağrılarda aynı bağlam tutamacını kullanmayın. Güvenlik hizmeti sağlayıcılarındaki API uygulaması iş parçacığı açısından güvenli değildir.

pInput[in, optional]

Giriş arabelleği tanımlayıcısını içeren InitializeSecurityContext (Schannel) istemci çağrısı tarafından oluşturulan SecBufferDesc yapısının işaretçisi.

Schannel güvenlik destek sağlayıcısını (SSP) kullanırken, ilk arabellek SECBUFFER_TOKEN türünde olmalı ve istemciden alınan güvenlik belirtecini içermelidir. İkinci arabellek SECBUFFER_EMPTY türünde olmalıdır.

fContextReq [in]

Bağlamı oluşturmak için sunucunun gerektirdiği öznitelikleri belirten bit bayrakları. Bit bayrakları bit düzeyindeVEYA işlemleri kullanılarak birleştirilebilir. Bu parametre aşağıdaki değerlerden biri veya daha fazlası olabilir.

Değer Anlamı
ASC_REQ_ALLOCATE_MEMORY Özet ve Schannel çıkış arabelleklerini sizin için ayıracaktır. Çıkış arabelleklerini kullanmayı bitirdiğinizde , FreeContextBuffer işlevini çağırarak bunları serbest gönderin.
ASC_REQ_CONFIDENTIALITY İletileri şifreleme ve şifresini çözme.
Özet SSP yalnızca SASL için bu bayrağı destekler.
ASC_REQ_CONNECTION Güvenlik bağlamı, biçimlendirme iletilerini işlemez.
ASC_REQ_EXTENDED_ERROR Hatalar oluştuğunda, uzak tarafa bildirim gönderilir.
ASC_REQ_MUTUAL_AUTH İstemcinin, istemci kimlik doğrulaması için kullanılacak bir sertifika sağlaması gerekir.
ASC_REQ_REPLAY_DETECT Yeniden oynatılan paketleri algılama.
ASC_REQ_SEQUENCE_DETECT Sıra dışı alınan iletileri algılama.
ASC_REQ_STREAM Akış odaklı bir bağlantıyı destekleyin.
Bu bayrak yalnızca Schannel tarafından desteklenir.

Olası öznitelik bayrakları ve anlamları için bkz. Bağlam Gereksinimleri. Bu parametre için kullanılan bayraklar, örneğin ASC_REQ_DELEGATE ASC_REQ ön ekleriyle eklenir.

İstenen öznitelikler istemci tarafından desteklenmiyor olabilir. Daha fazla bilgi için pfContextAttr parametresine bakın.

TargetDataRep [in]

Bu parametre Schannel ile kullanılmaz. Bu parametre için sıfır belirtin.

phNewContext [in, out, optional]

CtxtHandle yapısının işaretçisi. AcceptSecurityContext 'e (Schannel) yapılan ilk çağrıda, bu işaretçi yeni bağlam tutamacını alır. Sonraki çağrılarda, phNewContext phContext parametresinde belirtilen tanıtıcıyla aynı olabilir. phNewContext hiçbir zaman NULLolmamalıdır.

pOutput [in, out, optional]

Çıkış arabelleği tanımlayıcısını içeren bir SecBufferDesc yapısının işaretçisi. Bu arabellek, InitializeSecurityContext (Schannel) için ek çağrılara giriş için istemciye gönderilir. İşlev SEC_E_OK döndürse bile bir çıkış arabelleği oluşturulabilir. Oluşturulan tüm arabellekler istemci uygulamasına geri gönderilmelidir.

Çıktıda, bu arabellek güvenlik bağlamı için bir belirteç alır. Belirteç istemciye gönderilmelidir. İşlev, SECBUFFER_EXTRA türünde bir arabellek de döndürebilir. Ayrıca, çağıranın SECBUFFER_ALERT türünde bir arabellek geçirmesi gerekir. Çıktıda, bir uyarı oluşturulursa, bu arabellek bu uyarı hakkında bilgi içerir ve işlev başarısız olur.

pfContextAttr [out]

Oluşturulan bağlamın özniteliklerini gösteren bit bayrakları kümesi alan bir değişken işaretçisi. Çeşitli özniteliklerin açıklaması için bkz. bağlam gereksinimleri . Bu parametre için kullanılan bayraklar, örneğin ASC_RET_DELEGATE gibi ASC_RET ön eklerine eklenir.

Son işlev çağrısı başarıyla dönene kadar güvenlikle ilgili öznitelikleri denetlemeyin. ASC_RET_ALLOCATED_MEMORY bayrağı gibi güvenlikle ilgili olmayan öznitelik bayrakları son dönüş öncesinde denetlenebilir.

ptsTimeStamp[out, optional]

Bağlamın sona erme süresini alan bir TimeStamp yapısına yönelik bir işaretçi. güvenlik paketinin her zaman yerel saatte bu değeri döndürmesini öneririz.

Schannel SSP kullanılırken bu isteğe bağlıdır. Uzak taraf kimlik doğrulaması için kullanılacak bir sertifika sağladığında, bu parametre bu sertifika için süre sonu süresini alır. Hiçbir sertifika sağlanmadıysa, en uzun süre değeri döndürülür.

Uyarı

Kimlik doğrulama işleminin son çağrısına kadar, görüşmenin sonraki aşamalarında daha fazla bilgi sağlanacağından bağlamın süre sonu yanlış olabilir. Bu nedenle, ptsTimeStamp işlevine son çağrıya kadar NULL olmalıdır.

Dönüş değeri

Bu işlev aşağıdaki değerlerden birini döndürür.

Dönüş kodu/değeriAçıklama
SEC_E_INCOMPLETE_MESSAGE
0x80090318L
İşlev başarılı oldu. Giriş arabelleğindeki veriler eksik. Uygulamanın istemciden ek verileri okuması ve [AcceptSecurityContext (Schannel)](acceptsecuritycontext--schannel.md) çağrısı yapması gerekir.
Bu değer döndürülürken, pInput arabelleği SECBUFFER_MISSING BufferType üyesiyle [SecBuffer](/windows/win32/api/sspi/ns-sspi-secbuffer) yapısı içerir. SecBuffer'ın cbBuffer üyesi, bu işlev başarılı olmadan önce işlevin istemciden okuması gereken ek bayt sayısını gösteren bir değer içerir. Bu numara her zaman doğru olmasa da, bu numaranın kullanılması bu işleve birden çok çağrı yapmaktan kaçınarak performansa yardımcı olabilir.
SEC_E_INSUFFICIENT_MEMORY
0x80090300L
İşlev başarısız oldu. İstenen eylemi tamamlamak için yeterli bellek yok.
SEC_E_INTERNAL_ERROR
0x80090304L
İşlev başarısız oldu. SSPI hata koduyla eşleşmeyen bir hata oluştu.
SEC_E_INVALID_HANDLE
0x80100003L
İşlev başarısız oldu. İşleve geçirilen tanıtıcı geçerli değil.
SEC_E_INVALID_TOKEN
0x80090308L
İşlev başarısız oldu. İşleve geçirilen belirteç geçerli değil.
SEC_E_LOGON_DENIED
0x8009030CL
Oturum açılamadı.
SEC_E_NO_AUTHENTICATING_AUTHORITY
0x80090311L
İşlev başarısız oldu. Kimlik doğrulaması için hiçbir yetkiliyle bağlantı kurulamadı. Bunun nedeni aşağıdaki koşullardan kaynaklanıyor olabilir:
  • Kimlik doğrulama grubunun etki alanı adı yanlış.
  • Etki alanı kullanılamıyor.
  • Güven ilişkisi başarısız oldu.
SEC_E_NO_CREDENTIALS
0x8009030EL
İşlev başarısız oldu. phCredential parametresinde belirtilen kimlik bilgileri tanıtıcısı geçerli değil. Özet veya Schannel SSP kullanılırken bu değer döndürülebilir.
SEC_E_OK
0x00000000L
İşlev başarılı oldu. [*güvenlik bağlamı*](.. İstemciden alınan /secgloss/s-gly.md) kabul edildi. İşlev tarafından bir çıkış belirteci oluşturulduysa, istemci işlemine gönderilmelidir.
SEC_E_UNSUPPORTED_FUNCTION
0x80090302L
İşlev başarısız oldu. fContextReq parametresinde geçerli olmayan bir bağlam özniteliği bayrağı (ASC_REQ_DELEGATE veya ASC_REQ_PROMPT_FOR_CREDS) belirtildi.
SEC_E_APPLICATION_PROTOCOL_MISMATCH
0x80090367L
İstemci ile sunucu arasında ortak bir uygulama protokolü yoktur.
SEC_I_COMPLETE_AND_CONTINUE
0x00090314L
İşlev başarılı oldu. Sunucunun [CompleteAuthToken](/windows/win32/api/sspi/nf-sspi-completeauthtoken) çağrısı yapması ve çıkış belirtecini istemciye geçirmesi gerekir. Sunucu daha sonra istemciden bir dönüş belirteci bekler ve [AcceptSecurityContext (Schannel)](acceptsecuritycontext--schannel.md) için başka bir çağrı yapar.
SEC_I_COMPLETE_NEEDED
0x00090313L
İşlev başarılı oldu. Sunucunun istemciden iletiyi derlemeyi bitirmesi ve [CompleteAuthToken](/windows/win32/api/sspi/nf-sspi-completeauthtoken) işlevini çağırması gerekir.
SEC_I_CONTINUE_NEEDED
0x00090312L
İşlev başarılı oldu. Sunucunun çıkış belirtecini istemciye göndermesi ve döndürülen belirteci beklemesi gerekir. [AcceptSecurityContext (Schannel)](acceptsecuritycontext--schannel.md) çağrısı için döndürülen belirteç pInput'ta geçirilmelidir.
STATUS_LOGON_FAILURE
0xC000006DL
İşlev başarısız oldu. [AcceptSecurityContext (Schannel)](acceptsecuritycontext--schannel.md) işlevi, belirtilen bağlam oluşturulduktan sonra çağrıldı. Özet SSP kullanılırken bu değer döndürülebilir.

Açıklamalar

AcceptSecurityContext (Schannel) işlevi InitializeSecurityContext (Schannel) işlevinin sunucu karşılığıdır.

Sunucu bir istemciden istek aldığında, sunucu oturum için gerekenleri belirtmek için fContextReq parametresini kullanır. Bu şekilde, bir sunucu istemcilerin gizli veya bir bütünlükdenetlenmiş oturum kullanabileceklerini belirtebilir ve bu talebi karşılayamayan istemcileri reddedebilir. Alternatif olarak, bir sunucu hiçbir şey gerektirmez ve istemcinin sağlayabildiği veya gerektirdiği her şey pfContextAttr parametresinde döndürülür.

Karşılıklı kimlik doğrulaması gibi çok bacaklı kimlik doğrulamasını destekleyen bir paket için çağrı dizisi aşağıdaki gibidir:

  1. İstemci sunucuya bir belirteç iletir.
  2. Sunucu, acceptsecurityContext (Schannel) öğesini ilk kez çağırır ve bu da istemciye gönderilen bir yanıt belirteci oluşturur.
  3. İstemci belirteci alır ve InitializeSecurityContext'e (Schannel) geçirir. InitializeSecurityContext (Schannel) SEC_E_OK döndürürse, karşılıklı kimlik doğrulaması tamamlanmış olur ve güvenli bir oturum başlayabilir. InitializeSecurityContext (Schannel) bir hata kodu döndürürse, karşılıklı kimlik doğrulama anlaşması sona erer. Aksi takdirde InitializeSecurityContext (Schannel) tarafından döndürülen güvenlik belirteci istemciye gönderilir ve 2. ve 3. adımlar yinelenir.
  4. AcceptSecurityContext (Schannel) için eşzamanlı çağrılarda phContext değerini kullanmayın. Güvenlik sağlayıcılarındaki uygulama iş parçacığı açısından güvenli değildir.

fContextReq ve pfContextAttr parametreleri, çeşitli bağlam özniteliklerini temsil eden bit maskeleridir. Çeşitli özniteliklerin açıklaması için bkz. bağlam gereksinimleri .

Uyarı

pfContextAttr parametresi herhangi bir başarılı dönüşte geçerlidir, ancak bağlamın güvenlik yönleriyle ilgili bayrakları incelemeniz gerekir. Ara dönüşler, örneğin ISC_RET_ALLOCATED_MEMORY bayrağını ayarlayabilir.

Çağıran, son bağlam özniteliklerinin yeterli olup olmadığını belirlemekle sorumludur. Örneğin, gizlilik (şifreleme) istendiyse ancak oluşturulamadıysa, bazı uygulamalar bağlantıyı hemen kapatmayı seçebilir. güvenlik bağlamı oluşturulamazsa, sunucunun DeleteSecurityContext işlevini çağırarak kısmen oluşturulmuş bağlamı boşaltması gerekir. DeleteSecurityContext işlevinin ne zaman çağrılmasına ilişkin bilgi için bkz. DeleteSecurityContext .

güvenlik bağlamı oluşturulduktan sonra, sunucu uygulaması istemci sertifikasının eşlendiği kullanıcı hesabına bir tanıtıcı almak için QuerySecurityContextToken işlevini kullanabilir. Ayrıca, sunucu kullanıcının kimliğine bürünmek için ImpersonateSecurityContext işlevini kullanabilir.

Gereksinimler

Gereksinim Değer
Desteklenen en düşük düzeydeki istemci Windows 8.1 [yalnızca masaüstü uygulamaları]
Desteklenen en düşük sunucu Windows Server 2012 R2 [yalnızca masaüstü uygulamaları]
Başlık Sspi.h (Security.h dahil)
Kütüphane Secur32.lib
DLL Secur32.dll

Ayrıca bkz.

SSPI İşlevleri

DeleteSecurityContext

InitializeSecurityContext (Schannel)