Aracılığıyla paylaş


Forms Kimlik Doğrulaması ile Kullanıcıların Kimliğini Doğrulama (C#)

Microsoft tarafından

MVC uygulamanızdaki belirli sayfaları parolayla korumak için [Authorize] özniteliğini kullanmayı öğrenin. Web Sitesi Yönetim Aracı'nı kullanarak kullanıcıları ve rolleri oluşturmayı ve yönetmeyi öğrenirsiniz. Ayrıca kullanıcı hesabı ve rol bilgilerinin depolandığı yeri yapılandırmayı da öğrenirsiniz.

Bu öğreticinin amacı, ASP.NET MVC uygulamalarınızdaki görünümleri parolayla korumak için Forms kimlik doğrulamasını nasıl kullanabileceğinizi açıklamaktır. Kullanıcı ve rol oluşturmak için Web Sitesi Yönetim Aracı'nı kullanmayı öğrenirsiniz. Ayrıca yetkisiz kullanıcıların denetleyici eylemlerini çağırmasını önlemeyi de öğrenirsiniz. Son olarak, kullanıcı adlarının ve parolaların depolandığı yeri yapılandırmayı öğreneceksiniz.

Web Sitesi Yönetim Aracı'nı kullanma

Başka bir şey yapmadan önce bazı kullanıcılar ve roller oluşturarak başlamalıyız. Yeni kullanıcılar ve roller oluşturmanın en kolay yolu, Visual Studio 2008 Web Sitesi Yönetim Aracı'nın avantajlarından yararlanmaktır. Proje, ASP.NET Yapılandırma menü seçeneğini belirleyerek bu aracı başlatabilirsiniz. Alternatif olarak, Çözüm Gezgini penceresinin en üstünde görünen dünyaya isabet eden çekicin (biraz korkutucu) simgesine tıklayarak Web Sitesi Yönetim Aracı'nı başlatabilirsiniz (bkz. Şekil 1).

Şekil 1 – Web Sitesi Yönetim Aracı'nı başlatma

clip_image002

Web Sitesi Yönetim Aracı'nın içinde Güvenlik sekmesini seçerek yeni kullanıcılar ve roller oluşturursunuz. Stephen adlı yeni bir kullanıcı oluşturmak için Kullanıcı oluştur bağlantısına tıklayın (bkz. Şekil 2). Stephen kullanıcınıza istediğiniz herhangi bir parolayı (örneğin, gizli dizi) sağlayın.

Şekil 2 – Yeni kullanıcı oluşturma

clip_image004

İlk olarak rolleri etkinleştirerek ve bir veya daha fazla rol tanımlayarak yeni roller oluşturursunuz. Rolleri etkinleştir bağlantısına tıklayarak rolleri etkinleştirin . Ardından, Rol oluştur veya yönet bağlantısına tıklayarak Yöneticiler adlı bir rol oluşturun (bkz. Şekil 3).

Şekil 3 – Yeni rol oluşturma

clip_image006

Son olarak, Sally adlı yeni bir kullanıcı oluşturun ve Kullanıcı Oluştur bağlantısına tıklayıp Sally'yi oluştururken Yöneticiler'i seçerek Sally'yi Yöneticiler rolüyle ilişkilendirin (bkz. Şekil 4).

Şekil 4 – Role kullanıcı ekleme

clip_image008

Her şey söylenip bittiğinde Stephen ve Sally adında iki yeni kullanıcınız olmalıdır. Yöneticiler adlı yeni bir rolünüz de olmalıdır. Sally Yöneticiler rolünün bir üyesidir ve Stephen değildir.

Yetkilendirme Gerektirme

Eyleme [Authorize] özniteliğini ekleyerek kullanıcının denetleyici eylemini çağırmadan önce kimliğinin doğrulanması gerektirebilirsiniz. [Authorize] özniteliğini tek bir denetleyici eylemine veya bu özniteliği tüm denetleyici sınıfına uygulayabilirsiniz.

Örneğin, Listeleme 1'deki denetleyici CompanySecrets() adlı bir eylemi kullanıma sunar. Bu eylem [Authorize] özniteliğiyle süslendiğinden, kullanıcının kimliği doğrulanmadığı sürece bu eylem çağrılamaz.

Listeleme 1 – Controllers\HomeController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
        
        [Authorize]
        public ActionResult CompanySecrets()
        {
            return View();
        }
    }
}

Tarayıcınızın adres çubuğuna /Home/CompanySecrets URL'sini girerek CompanySecrets() eylemini çağırırsanız ve kimliği doğrulanmış bir kullanıcı değilseniz otomatik olarak Oturum Açma görünümüne yönlendirilirsiniz (bkz. Şekil 5).

Şekil 5 – Oturum Açma görünümü

clip_image010

Kullanıcı adınızı ve parolanızı girmek için Oturum Açma görünümünü kullanabilirsiniz. Kayıtlı bir kullanıcı değilseniz kayıt bağlantısına tıklayarak Kayıt görünümüne gidebilirsiniz (bkz. Şekil 6). Yeni bir kullanıcı hesabı oluşturmak için Kaydet görünümünü kullanabilirsiniz.

Şekil 6 – Kayıt görünümü

clip_image012

Başarıyla oturum açtıktan sonra CompanySecrets görünümünü görebilirsiniz (bkz. Şekil 7). Varsayılan olarak, tarayıcı pencerenizi kapatana kadar oturumunuz açık kalır.

Şekil 7 – CompanySecrets görünümü

clip_image014

Kullanıcı Adına veya Kullanıcı Rolüne Göre Yetkilendirme

Bir denetleyici eylemine erişimi belirli bir kullanıcı kümesiyle veya belirli bir kullanıcı rolü kümesiyle kısıtlamak için [Authorize] özniteliğini kullanabilirsiniz. Örneğin, Liste 2'deki değiştirilmiş Giriş denetleyicisi StephenSecrets() ve AdministratorSecrets() adlı iki yeni eylem içerir.

Listeleme 2 – Controllers\HomeController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        
        [Authorize]
        public ActionResult CompanySecrets()
        {
            return View();
        }


        [Authorize(Users="Stephen")]
        public ActionResult StephenSecrets()
        {
            return View();
        }


        [Authorize(Roles = "Administrators")]
        public ActionResult AdministratorSecrets()
        {
            return View();
        }

    }
}

Yalnızca Stephen kullanıcı adına sahip bir kullanıcı StephenSecrets() eylemini çağırabilir. Diğer tüm kullanıcılar Oturum Açma görünümüne yönlendirilir. Users özelliği, kullanıcı hesabı adlarının virgülle ayrılmış listesini kabul eder.

AdministratorSecrets() eylemini yalnızca Yöneticiler rolündeki kullanıcılar çağırabilir. Örneğin, Sally Yöneticiler grubunun bir üyesi olduğundan AdministratorSecrets() eylemini çağırabilir. Diğer tüm kullanıcılar Oturum Açma görünümüne yönlendirilir. Roles özelliği, rol adlarının virgülle ayrılmış bir listesini kabul eder.

Kimlik Doğrulamasını Yapılandırma

Bu noktada, kullanıcı hesabı ve rol bilgilerinin nerede depolandığını merak ediyor olabilirsiniz. Varsayılan olarak, bilgiler MVC uygulamanızın App_Data klasöründe bulunan ASPNETDB.mdf adlı bir (RANU) SQL Express veritabanında depolanır. Bu veritabanı, üyeliği kullanmaya başladığınızda ASP.NET çerçevesi tarafından otomatik olarak oluşturulur.

Çözüm Gezgini penceresinde ASPNETDB.mdf veritabanını görmek için önce Proje, Tüm Dosyaları Göster menü seçeneğini belirlemeniz gerekir.

Bir uygulama geliştirirken varsayılan SQL Express veritabanını kullanmak normaldir. Ancak büyük olasılıkla bir üretim uygulaması için varsayılan ASPNETDB.mdf veritabanını kullanmak istemezsiniz. Bu durumda, aşağıdaki iki adımı tamamlayarak kullanıcı hesabı bilgilerinin depolandığı yeri değiştirebilirsiniz:

  1. Application Services veritabanı nesnelerini üretim veritabanınıza ekleme - Uygulama bağlantı dizenizi üretim veritabanınıza işaret eden şekilde değiştirin

İlk adım, gerekli tüm veritabanı nesnelerini (tablolar ve saklı yordamlar) üretim veritabanınıza eklemektir. Bu nesneleri yeni bir veritabanına eklemenin en kolay yolu, ASP.NET SQL Server Kurulum Sihirbazı'nın avantajlarından yararlanmaktır (bkz. Şekil 8). Microsoft Visual Studio 2008 program grubundan Visual Studio 2008 Komut İstemi'ni açıp komut isteminden aşağıdaki komutu yürüterek bu aracı başlatabilirsiniz:

aspnet_regsql

Şekil 8 – ASP.NET SQL Server Kurulum Sihirbazı

clip_image016

ASP.NET SQL Server Kurulum Sihirbazı, ağınızda bir SQL Server veritabanı seçmenize ve ASP.NET uygulama hizmetlerinin gerektirdiği tüm veritabanı nesnelerini yüklemenize olanak tanır. Veritabanı sunucusunun yerel makinenizde bulunması gerekmez.

Not

ASP.NET SQL Server Kurulum Sihirbazı'nı kullanmak istemiyorsanız, uygulama hizmetleri veritabanı nesnelerini eklemeye yönelik SQL betiklerini aşağıdaki klasörde bulabilirsiniz:

C:\Windows\Microsoft.NET\Framework\v2.0.50727

Gerekli veritabanı nesnelerini oluşturduktan sonra, MVC uygulamanız tarafından kullanılan veritabanı bağlantısını değiştirmeniz gerekir. Web yapılandırma (web.config) dosyanızdaki ApplicationServices bağlantı dizesini üretim veritabanına işaret eden şekilde değiştirin. Örneğin, Liste 3'teki değiştirilen bağlantı MyProductionDB adlı bir veritabanına işaret eder (özgün ApplicationServices bağlantı dizesi açıklama satırı yapılmıştır).

Liste 3 – Web.config

<connectionStrings>
    <!--<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>-->
  <add name="ApplicationServices" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=MyProductionDB" />
</connectionStrings>

Veritabanı İzinlerini Yapılandırma

Veritabanınıza bağlanmak için Tümleşik Güvenlik kullanıyorsanız veritabanınıza oturum açma bilgileri olarak doğru Windows kullanıcı hesabını eklemeniz gerekir. Doğru hesap, web sunucunuz olarak ASP.NET Geliştirme Sunucusu'nu mu yoksa Internet Information Services'i mi kullandığınıza bağlıdır. Doğru kullanıcı hesabı, işletim sisteminize de bağlıdır.

ASP.NET Geliştirme Sunucusu'nu (Visual Studio tarafından kullanılan varsayılan web sunucusu) kullanıyorsanız uygulamanız Windows kullanıcı hesabınız bağlamında yürütülür. Bu durumda, Windows kullanıcı hesabınızı veritabanı sunucusu oturum açma bilgileri olarak eklemeniz gerekir.

Alternatif olarak, Internet Information Services kullanıyorsanız veritabanı sunucusu oturum açma bilgileri olarak ASPNET hesabını veya NT AUTHORITY/NETWORK SERVICE hesabını eklemeniz gerekir. Windows XP kullanıyorsanız ASPNET hesabını veritabanınıza oturum açma adı olarak ekleyin. Windows Vista veya Windows Server 2008 gibi daha yeni bir işletim sistemi kullanıyorsanız, veritabanı oturum açma bilgileri olarak NT AUTHORITY/NETWORK SERVICE hesabını ekleyin.

Microsoft SQL Server Management Studio kullanarak veritabanınıza yeni bir kullanıcı hesabı ekleyebilirsiniz (bkz. Şekil 9).

Şekil 9 – Yeni bir Microsoft SQL Server oturum açma bilgisi oluşturma

clip_image018

Gerekli oturum açma bilgilerini oluşturduktan sonra, oturum açma bilgilerini doğru veritabanı rollerine sahip bir veritabanı kullanıcısıyla eşlemeniz gerekir. Oturum açma bilgilerine çift tıklayın ve Kullanıcı Eşlemesi sekmesini seçin. Bir veya daha fazla uygulama hizmeti veritabanı rolü seçin. Örneğin, kullanıcıların kimliğini doğrulamak için aspnet_Membership_BasicAccess veritabanı rolünü etkinleştirmeniz gerekir. Yeni kullanıcılar oluşturmak için aspnet_Membership_FullAccess veritabanı rolünü etkinleştirmeniz gerekir (bkz. Şekil 10).

Şekil 10 – Uygulama Hizmetleri veritabanı rolleri ekleme

clip_image020

Özet

Bu öğreticide, ASP.NET MVC uygulaması oluştururken Forms kimlik doğrulamasını kullanmayı öğrendiniz. İlk olarak, Web Sitesi Yönetim Aracı'nı kullanarak yeni kullanıcılar ve roller oluşturmayı öğrendinsiniz. Ardından, yetkisiz kullanıcıların denetleyici eylemlerini çağırmasını önlemek için [Authorize] özniteliğini kullanmayı öğrendiniz. Son olarak, kullanıcı ve rol bilgilerini bir üretim veritabanında depolamak için MVC uygulamanızı yapılandırmayı öğrendinsiniz.