1) Öncelikle web service’in kurulacağı app server üzerinde svctest adında bir domain user’ı oluşturulup ardından aynı user için SQL Server’daki ilgili database’ e db_owner hakkı verilmelidir.
2) IIS üzerine web service eklenmeden önce Application Pool oluşturulması gerekmektedir. Aşağıdaki şekilde oluşturulmalıdır.
TLS1.2 desteği isteniyorsa .NET CLR sürümü v4.5 ve üzeri olmalıdır.
3) Oluşturulan Application Pool’un Advanced Settings’inde Identity bilgisi LocalSystem olarak seçilmeli.
4) Application Pool gelişmiş ayarlar ekranında yapılacak ek değişiklikler :
İşlem Modeli altındaki
Boşta Zaman Aşımı : 5
En fazla çalışan işlem adımı : 100 olarak günellenmeli.
Hızlı Çökme Koruması altındaki
En fazla Hata sayısı : 10
Hata Aralığı :10 olarak güncellenmeli.
5) Web service ‘in eklenmesi.
Fiziksel Yol: Web Service’e ait dosyaların bulunduğu lokasyon.
SSL sertifikası olması durumunda Bağlama türü https ve Bağlantı Noktası 443 olarak set edildikten sonra Seç butonuna basılarak sunucuya yüklenmiş SSL sertifikalarından biri seçilir.
6) Eklenen web service e ait Authentication ekranında sadece Anonymous Authentication enabled olmalı.
7) Anonymous Authentication üzerinde Edit butonuna basılarak user identity olararak Application Pool Identity seçilmeli.
8) Web Service klasör yetkileri
Web service klasörüne IUSR kullanıcısı için izin (read-write-modify hakkı) verilmeli.
9) Administrative Tools’dan Local Security Policies ekranı açılır. Local Policies altında User Rights Assignment sekmesine tıklanır ve sağ tarafta çıkan policy lerden Impersonate a client after authentication seçeneğine tıklanır.
Türkçesi: Kimlik doğrulamasından sonra istemcinin özelliklerini al.
10) İlk başta oluşturulan domain user’ı bu listeye eklenerek Apply butonuna tıklanır (İşlemin server tarafında aktif hale gelmesi yaklaşık 90 sn sürüyor).
Böylelikle web service'e erişim sağlayacak kullanıcıların impersonation kullanılarak svctest hesabı üzerinden sql server'a erişimi sağlanmış olacak.
Örnek
Web.Config içeriği
<?xml version="1.0"
encoding="UTF-8"?>
<configuration>
<connectionStrings>
<add connectionString="Data
Source=SERVER_NAME_OR_IP;Initial Catalog=DATABASE_NAME;Integrated
Security=SSPI;Connection Timeout=10;"
name="MyConnectionString"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<authentication
mode="Windows" />
<compilation debug="true" />
</system.web>
</configuration>
Örnek Impersonation
(kimliğe bürünme :) ) kodu
<WebMethod()> _
Public Function GetCurrentName() As String
Dim userMessage As String = ""
Try
Dim impersonationUser As
WindowsImpersonationContext = Nothing
Try
Dim ws As New WindowsIdentity("svctest@DOMAIN")
impersonationUser = ws.Impersonate()
‘Impersonation
işlemi başarılı ise burada veritabanı işlemleri gerçekleştirilebilir.
Catch ex As Exception
userMessage = "Hata1:
" & ex.Message & " "
End Try
Try
If Not impersonationUser Is
Nothing Then
impersonationUser.Undo()
End If
Catch ex As Exception
userMessage = userMessage &
"Hata2:" & ex.Message & " "
End Try
Catch ex As Exception
userMessage = userMessage &
"Hata3: " & ex.Message
End Try
Return userMessage
End Function
Connecting to SQL Server Using NT Domain Account With ASP.NET Web Service In IIS
No comments:
Post a Comment