Ana içeriğe atla

ASP.NET Web Ortamında Active Directory İşlemleri

Bu makalemizde ASP.NET projelerinde, active directory’ye ulaşılırak yapılan bazı işlemler üzerinde duracağız;
  • Web projesinin client’ının açıldığı bilgisayarda açık olan account sahibinin kullanıcı adı ve bağlı olduğu domain alınabilir.
  • Bir active directory’den kullanıcı adı ile kullanıcının grupları ve bazı bilgileri alınabilir.
  • Kullanıcı adı, şifresi ve domain biliniyorsa bu bilgilerin doğruluğu active directory’ye login olmaya çalışılarak kontrol edilebilir.
Bu işlemler için bazı referansları projeye eklememiz ve dll’leri kullanmamız gerekmektedir. İlk olarak account’tan kullanıcı ismi ve domain adı alma ve sonrasında bu kullanıcının active directory gruplarını alma işlemine göz atacağız:
İlk olarak proje referanslarına System.DirectoryServices eklenir:

image
Şekil 1. Referans eklenmesi
Daha sonra “System.DirectoryServices” active directory’ye erişilecek sınıf içerisinden import edilir:
Imports System.Security.Principal
Imports System.Security.Permissions
Imports System.Runtime.InteropServices
Imports System.DirectoryServices
Domain’e bağlı olan kullanıcı ismi ve domain adı aşağıdaki şekilde alınabilir:

strDomainAndUser = My.User.CurrentPrincipal.Identity.Name.ToString
My.User.CurrentPrincipal.Identity.Name


içerisinden dönen string “domain/username” şeklinde olur, mesela; “univera/nimet.sozeri”.

Web projemizin virtual directory özellikleri ve Web.Config içeriği kullanıcı ismini alabilmek için ayarlanmalıdır; Virtual directory özelliklerinden “Directory Security” tabı altındaki “Anonymous access and authentication control” kısmındaki “Edit” butonu ile açılan “Authentication Methods” penceresinde anonymous access seçeneği işaretlenmemiş olmalıdır. Bu şekilde domain’e bağlanmış olan kullanıcı adı ve bağlı olduğu domain adı alınabilir.
image
Şekil 2. Authentication mode ayarlanması
Ayrıca Web.Config içerisinde “authentication” elemanının mode özelliği “Forms” olmamalıdır. Bu özellik de “Windows” olarak değiştirilmelidir.
<authentication mode="Windows"/>      
Kullanıcı adı alındıktan sonra da active directory’de kullanıcının dahil olduğu gruplar “DirectoryServices”a ait olan “DirectoryEntry”, “DirectroySearcher” sınıfları kullanılarak alınabilir:
Dim objRsl As SearchResult
Dim objDE As New DirectoryEntry(LDAP://DC=Univera,DC=NET)
Dim objSrc As New DirectorySearcher(objDE)
objSrc.Filter = String.Format("(SAMAccountName={0})", userName)objSrc.PropertiesToLoad.Add("memberOf")
objRsl = objSrc.FindOne()
If Not objRsl Is Nothing Then
      For i = 0 To objRsl.Properties("memberOf").Count – 1
                   ‘memberOf özelliğinden gruplar alınıp amaca uygun işleme katılır
      Next
End If
SearchResult nesnesinin içerisinden memberOf değerleri alınabilir ve kullanıcının grupları bu şekilde belirlenebilir. Kullanıcının active directory gruplarını alabilmek için de Web.Config’te bir özellik uyarlanmalıdır; identity elemanının impersonate özelliği “True” olarak belirlenmelidir:
<identity impersonate="true"  />

Son olarak kullanıcı adı, domain adı ve şifre elimizde varsa bu değerlerin active directory’den kontrol edilmesi işlemini inceleyelim. Bu işlem için de “C:\WINDOWS\system32” altından “advapi32.dll” alınıp projeye eklenir.
image
Şekil 3. Advapi32.dll’in projeye eklenmesi
Kod içerisinden bu dll daha sonra import edilerek kullanılacak fonksiyonlar belirtilir.
<DllImport("advapi32.dll")> _
         Private Shared Function LogonUser(ByVal _
         lpszUsername As String, ByVal lpszDomain _
            As String, ByVal lpszPassword As String, _
            ByVal dwLogonType As Integer, _
            ByVal dwLogonProvider As Integer, _
            ByRef phToken As Integer) As Boolean
End Function
Biz burada “LogonUser” fonksiyonunu kullanacağız. Bu fonksiyon ile bir kullanıcı adı, domain adı ve şifrenin active directory’ye login olup olmadığı kontrol edilir, sonuçta login işlemi başarılı ise “True” olarak boolean değer döner.
Dim objAd As New AD
If objAd.LogOnToActiveDirectory("nimet.sozeri", "Univera", "Sifre") Then
         Label1.Text = "Kullanıcı 'nimet.sozeri' ile 'Univera' domain'ine log in olunabildi!"
End If
Nimet SÖZERİ

Yorumlar

  1. Öncelikle örnek için sağolun. Sorum şu;
    Active Directory ile kullanıcın logonhours unu nasıl değiştirebilirim, teşekkürler.

    YanıtlaSil
  2. Yorumunuz için teşekkürler,
    Active Directory'de logonHours'u değiştirmek üzerine deneyimim yok, bunu yapabilmek için Active Directory'de admin olmak gerekiyor, bu nedenle ben yazdığım kodlarda yetki ile ilgili hata alıyorum, ancak sizin deneme şansınız varsa vereceğiniz mail adresine çalıştırmayı denediğim kodları gönderebilirim.

    YanıtlaSil
  3. Merhaba makale için sağolun gerçekten işime yaradı.Web uygulamasında domaine login olan kullanıcının bilgisini alabilirmiyim acaba.Web sayfasının çağaran kullanıcının windows login bilgisi

    YanıtlaSil
  4. Teşekkürler, işinize yaradığına sevindim,
    Domain'e login olup da web sayfasını çağıran kullanıcının domain ve kullanıcı bilgisi My.User.CurrentPrincipal.Identity.Name özelliği kullanılarak alınabilir.
    My.User.CurrentPrincipal.Identity.Name.ToString() ile dönen string içerisinde domain ve kullanıcı bilgisini bulabiliriz.
    "domain/username" şeklinde gelen string parse edilerek bu iki bilgi alınabilir.

    Dim UserDomain() As String = Split(My.User.CurrentPrincipal.Identity.Name.ToString(), "\")
    Dim username As String = strUserDomain(1)

    yukarıdaki şekilde username değişkenine kullanıcı bilgisini atabiliriz.

    YanıtlaSil
  5. Paylaşımlarınız için teşekkür ederiz. Herhangi bir sorunda dell laptop tamircisi olarak hizmet vermekten onur duyarız.

    YanıtlaSil

Yorum Gönder

Bu blogdaki popüler yayınlar

UML ve Modelleme – Bölüm 4 (Class (Sınıf) Diyagramları)

Bir önceki makalemizde UML modellemede kullanılan ilk diyagram olan Use Case diyagramını incelemiştik. Bu makalemizde nesne tabanlı programlamada kullanılan sınıflar ve sınıfların arasındaki ilişkileri modelleyebileceğimiz diyagramlar olan Class(Sınıf) diyagramlarını inceleyeceğiz. UML’de sınıflar, nesne tabanlı programlama mantığı ile tasarlanmıştır. Sınıf diyagramının amacı bir model içerisinde sınıfların tasvir edilmesidir. Nesne tabanlı uygulamada, sınıfların kendi özellikleri (üye değişkenler), işlevleri (üye fonksiyonlar) ve diğer sınıflarla ilişkileri bulunmaktadır. UML’de sınıf diyagramlarının genel gösterimi aşağıdaki gibidir. Şekil 1. Class Diyagram Şekil1’de görüldüğü üzere bir dikdörtgeni 3 parçaya bölüyoruz. En üst bölüm sınıf adını, orta kısım özellik listesini (üye değişkenler) ve en son kısım, işlev listesini (üye fonksiyonlar) göstermektedir. Çoğu diyagramlarda alt iki bölüm çıkarılır. Genelde tüm özellik ve işlevler gösterilmemektedir. Ama

Yazılım Maliyet Tahmineleme Tecrübeleri

Yazılım mühendisliğinde maliyet hesabı her zaman problem olmuştur. "Bu iş kaç Adam/Gün tutar?" sorusuyla sıkça karşılaşıyoruz. Adam/gün veya Adam/ay ölçütleri bir kaynağın/kişinin belirtilen zaman dilimindeki iş gücü anlamına gelir. Tabi bu noktada yine kafa karışıklıkları başlar. 6 A/G'lik bir işi hızlandıralım diye 2 kişi ile yapmaya çalışsak ve kaynak/kod, modül, altyapı, insan vb. her bir şeyi bir kenara bıraksak, matematiksel basit formülle 6/2=3 A/G'de biter? Gerçek hayat böyle değil, öncelikle bunu anlamamız lazım. Hep şu örnek verilir; "Aynı bebeği 2 kadın birlikte daha kısa sürede doğurur mu?" Eğer bunun cevabı "Evet" ise (veya bir gün böyle bir durum ortaya çıkarsa), yazımı değiştirmem gerekecek:) Mevzu gerçekten derin...Maliyet hesabı; bulunduğunuz firmanın yazılım süreçlerini hangi methodlarla uyguladığına, ilgili işin o dönemdeki aciliyetine, (şirket yönetiminin baskısına:)) vb. bir çok duruma bağlı olabilir. Örneğin; bizim firmada e

UML ve Modelleme – Bölüm 3 (Use Case Diyagramlar)

Önceki iki makalemizde ( 1 , 2 ) UML’e genel olarak değinip ve modellemede kullanacağımız dokuz diyagram hakkında bilgiler vermiştik. Bu makalemizde Use Case diyagramından detaylı bahsedeceğiz. Öncelikle, genel Use case diyagramının tanımını hatırlayalım. “Bir kullanıcı ve bir sistem arasındaki etkileşimi anlatan senaryo topluluğudur.” Ivar Jacobson Senaryo tanımı için der ki: “Aktörle sistem arasında gerçekleştirilen, sonucunda aktöre farkedilir getirisi/ faydası oluşan etkileşimli diyalogdur. ” UML Use Case Diyagramları  sistemin işlevselliğini açıklamak amacıyla kullanılır. Sistemin birbirinden ayrı özelliklerinin detaylarını göstermekten ziyade, Use Case Diyagramlar, tüm mevcut işlevselliği göstermek için kullanılabilir. Buradaki en önemli noktalardan biri,   Use Case Diyagramlar temelde sequence diyagram ve akış diyagramlarından farklıdır. Use Case diyagramlar dört ana elemandan oluşmaktadır. Aktörler , Sistem (Proje kapsamını belirtir) , Use Caseler ve bunlar ara