Silverlight 2.0 Beta 2 ile ASP.NET Forms Authentication kullanımı

0 dakikada yazıldı

6475 defa okundu

Düzenle

ASP.NET Authentication mekanizmaları neredeyse tüm ASP.NET projelerinde
kullandığımız pratik çözümlerden. Özellikle Forms Authentication belki
de özellikle internet projelerinde en sık karşılaştığımız sistem. Peki
nasıl yaparız da Silverlight 2.0 Beta 2 uygulamalarımızda ASP.NET
Forms Authentication
yapısını kullanabiliriz?

WCF üzerinden Authentication servisine ulaşalım.

Silverlight tarafında sunucuyla veri alışverişi için en uygun seçim WCF
servisleri. Bu nedenle bize bir şekilde Authentication servisine
ulaşabileceğimiz bir servis gerekiyor. Yeni bir Silverlight projesi
yaratarak yanında gelen ASP.NET sitesiyle işlemlerimizi yapmaya
başlayalım.

ASP.NET'in kendi WCF Authentication servis altyapısını kullanacağız. Tek
ihtiyacımız olan bir Wrapper. Bunun için hemen ASP.NET sitesine sağ tuş
ile tıklayarak gelen menüden "Add New Item" diyip normal bir Text File
ekleyelim. Bu yeni dosyanın adını Auth.svc şeklinde düzenledikten
sonra içini açarak aşağıdaki kodu yapıştıralım.

<%@ ServiceHost Language="VB" Service="System.Web.ApplicationServices.AuthenticationService"
%>

Böylece servisimizi tamamladık. Sıra geldi bu servisin çalışması için
Web.Config içerisinde yapmamız gereken ayarlara. İlk olarak Forms
Authentication
yapımızı ayarlayalım.

      <authentication
mode="Forms">

        <forms
loginUrl="default.aspx"
protection="All" timeout="30" path="/">

          <credentials
passwordFormat="Clear">

            <user
name="daron"
password="123" />

          </credentials>

        </forms>

      </authentication>

      <authorization>

        <deny
users="?" />

      </authorization>

Yukarıdaki kodumuz ile default.aspx haricindeki sitedeki her şeyi
dışarıya kapadık. Çok uğraşmamak için hemen Web.Config içerisinde de bir
kullanıcı tanımladım. Normalde bu tarz bir yapıyı kimseye tavsiye
etmiyorum. Tabi tüm dosyaları dışarıya kapadığımız için Silverlight
uygulaması da Auth.svc servisine de ulaşamayacak. O nedenle
servisimizi Authentication dışında tutup herkese açmamız lazım.

  <location
path="Auth.svc">

    <system.web>

      <authorization>

        <allow
users="*"/>

      </authorization>

    </system.web>

  </location>

Forms Authentication ayarlarımızı tamamladığımıza göre artık WCF
servisimizle ilgili ayarları da yapabiliriz.

  <system.serviceModel>

    <services>

      <service
name="System.Web.ApplicationServices.AuthenticationService"

              behaviorConfiguration="AuthenticationServiceTypeBehaviors">

        <endpoint
contract="System.Web.ApplicationServices.AuthenticationService"

                  binding="basicHttpBinding"
bindingConfiguration="userHttp"

                  bindingNamespace="http://asp.net/ApplicationServices/v200"/>

      </service>

    </services>

    <bindings>

      <basicHttpBinding>

        <binding
name="userHttp">

          <security
mode="None"/>

        </binding>

      </basicHttpBinding>

    </bindings>

    <behaviors>

      <serviceBehaviors>

        <behavior
name="AuthenticationServiceTypeBehaviors">

          <serviceMetadata httpGetEnabled="true"/>

        </behavior>

      </serviceBehaviors>

    </behaviors>

    <!--
HTTP üzerinden servise ulaşımı sağlar.
-->

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

  </system.serviceModel>

  <!--Authentication servisini dışarıya açar-->

  <system.web.extensions>

    <scripting>

      <webServices>

        <authenticationService enabled="true"
requireSSL="false"/>

      </webServices>

    </scripting>

  </system.web.extensions>

Her şey hazır. Internet tarayıcınızda Auth.svc adresini açtığınızda
servisin çalışır halde olduğunu görebilirsiniz. Sıra geldi Silverlight
ile bu servisi kullanmaya.

WCF Authentication Servisimiz Silverlight ile dilleniyor.

Herhangi bir WCF servisini Silverlight uygulamamıza linklermiş gibi yine
projeye sağ tıklayarak "Add Service Reference" diyerek referansımızı
yaratıyoruz. Sonrasında artık kod içerisinde tüm Authentication
mekanizmalarını kullanabiliriz.

[VB]

    WithEvents Servisim As New
ServiceReference1.AuthenticationServiceClient

 

    Private Sub Giris_Click(ByVal sender As Object,
ByVal e As System.Windows.RoutedEventArgs) Handles Giris.Click

        Servisim.LoginAsync(Kullanici.Text, Sifre.Text, "", True)

    End Sub

 

    Private Sub Servisim_LoginCompleted(ByVal sender As Object,
ByVal e As
ServiceReference1.LoginCompletedEventArgs) Handles Servisim.LoginCompleted

        Giris.Content = e.Result

    End Sub

[C#]

        public Page()

        {

            InitializeComponent();

            Giris.Click += new RoutedEventHandler(Giris_Click);

        }

 

        void Giris_Click(object sender, RoutedEventArgs e)

        {

            ServiceReference1.AuthenticationServiceClient Servisim =
new
SilverlightApplication2.ServiceReference1.AuthenticationServiceClient();

            Servisim.LoginCompleted += new EventHandler<SilverlightApplication2.ServiceReference1.LoginCompletedEventArgs>(Servisim_LoginCompleted);

            Servisim.LoginAsync(Kullanici.Text, Sifre.Text, "", true);

        }

 

        void
Servisim_LoginCompleted(object
sender, SilverlightApplication2.ServiceReference1.LoginCompletedEventArgs e)

        {

            Giris.Content = e.Result.ToString();

        }

Yukarıdaki örnek kodlar içerisinde WCF servisimizin LoginAsync metodunu
kullanarak bir Login işlemi yapmaya çalışıyoruz. Yine servis ile beraber
gelen event'lardan biri olan LoginCompleted durumunda ise Login
işleminin başarılı olup olmadığını ekrana yazdırıyoruz. Bu şekilde
servis içerisinde kullanabileceğiniz Logout, IsLoggedIn gibi
metodlar da bulunuyor.

Hepinize kolay gelsin.