Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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ğeri | Açıklama |
|---|---|
| İş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. |
| İşlev başarısız oldu. İstenen eylemi tamamlamak için yeterli bellek yok. |
| İşlev başarısız oldu. SSPI hata koduyla eşleşmeyen bir hata oluştu. |
| İşlev başarısız oldu. İşleve geçirilen tanıtıcı geçerli değil. |
| İşlev başarısız oldu. İşleve geçirilen belirteç geçerli değil. |
| Oturum açılamadı. |
| İş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:
|
| İş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. |
| İş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. |
| İş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. |
| İstemci ile sunucu arasında ortak bir uygulama protokolü yoktur. |
| İş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. |
| İşlev başarılı oldu. Sunucunun istemciden iletiyi derlemeyi bitirmesi ve [CompleteAuthToken](/windows/win32/api/sspi/nf-sspi-completeauthtoken) işlevini çağırması gerekir. |
| İş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. |
| İş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:
- İstemci sunucuya bir belirteç iletir.
- Sunucu, acceptsecurityContext (Schannel) öğesini ilk kez çağırır ve bu da istemciye gönderilen bir yanıt belirteci oluşturur.
- İ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.
- 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 |