ASP .NET Membership w WinForms.

ASP .NET Membership jest bardzo dobrym rozwiązaniem dla uwierzytelnienia oraz autoryzacji użytkowników w aplikacji webowej. Umożliwia m.in. zarządzanie kontami użytkowników czy tworzenie ról. Często jednak system składa się również z aplikacji typu desktop. W rozbudowanych systemach proponuję zrezygnować z czystego ASP .NET Membership na rzecz Windows Identity Framework. Jeśli jednak tworzymy małą aplikacje z pewnością przyda nam się wsparcie ASP .NET Membership w WinForms.

Rozwiązaniem problemu są tzw. client application services. Zacznijmy jednak od samego początku:

  1. Najpierw tworzymy oczywiście aplikację web ASP .NET.
  2. Oprócz autoryzacji istnieje również możliwość udostępniania właściwości aplikacji WinForms. Dodajemy przykładową właściwość:
    <profile>
      <properties>
          <add name="Color" type="string" defaultValue="Blue"/>
        </properties>
    </profile>
    ...
    </system.web>

  3. W celu udostępnienia właściwości Color wystarczy w w web.config dodać następujący wpis:
    <system.web.extensions>
        <scripting>
            <webServices>
                <authenticationService enabled="true" />
                <roleService enabled="true"/>
                <profileService enabled="true" readAccessProperties="Color" writeAccessProperties="Color"/>
            </webServices>        
        </scripting>
    </system.web.extensions>

Powyższy kod również udostępnia usługę uwierzytelnienia oraz zarządzania rolami.

Następnym etapem jest konfiguracja aplikacji WinForms:

  1. Tworzymy aplikacje typu WindowsForms.
  2. Wchodzimy we właściwości projektu a konkretnie w zakładkę Services. Następnie ustawiamy prawidłowy adres. Jeśli zakłada nie jest aktywna to prawdopodobnie  został ustawiony .NET Framework Client Profile i należy ustawić np. NET Framework 4.0.

    image 

  3. Wchodzimy w zakładkę Settings oraz klikamy w przycisk Load Web Settings. Po wpisaniu loginu i hasła zostaną zwrócone udostępnione właściwości:

image 

Od tej pory w kodzie aplikacji WinForms możemy odwoływać się do właściwości jak do zwykłych zasobów, np:

public Form1()
{
  InitializeComponent();
  if(Login())
    this.BackColor = Color.FromName(Properties.Settings.Default.Color) ;
}
private bool Login()
{
  bool result = System.Web.Security.Membership.ValidateUser("admin", "password");
  if (result)
      MessageBox.Show("Zalogowano.", "Autoryzacja", MessageBoxButtons.OK,MessageBoxIcon.Information);
  else
      MessageBox.Show("Nieprawidłowy login lub hasło.", "Autoryzacja", MessageBoxButtons.OK,MessageBoxIcon.Error);

  return result;
}

Podobnie można zapisywać właściwość:

Properties.Settings.Default.Color = Color.Red.ToString();
Properties.Settings.Default.Save();

W celu przekonania się, że to naprawdę działa ustawmy kolor również w aplikacji web:

protected void Page_Load(object sender, EventArgs e)
{                                        
  Button1.BackColor = System.Drawing.Color.FromName(Context.Profile.GetPropertyValue("Color").ToString());
}

Oczywiście aby kod zadziałał użytkownik musi być zalogowany (np. za pomocą gotowej kontrolki Login).

W podobny sposób można używać metody InRole (sprawdzanie czy użytkownik należy do danej grupy). Warto podkreślić, że za pomocą client application service można korzystać z Membership również w aplikacjach WPF, AJAX czy nawet Silverlight.

One thought on “ASP .NET Membership w WinForms.”

Leave a Reply

Your email address will not be published.