2012-03-28 31 views
5

Microsoft ASP.NET MVC 4 ApiController kullanarak basit bir RESTful Web hizmeti (şimdilik GET-only) yaptım.Microsoft MVC 4, APIController ve uygun RESTful giriş Web hizmeti

Şimdi hizmet için bir yetkilendirme sistemi uygulama yolunu arıyorum. WS'yi kullanarak tüm uygulamalar için benzersiz bir giriş sayfasına sahip olmak istemediğim için, yerleşik FormsAuthentication'u kullanmak istemediğimi biliyorum. dahası, RESTful paradigmasını kırar, bir yönlendirmeyi zorlar ve istemciyi uygun 401 durum koduyla bildirmez.

Yani şu satırları silme engelli FormsAuthentication var benim web.config:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" timeout="2880" /> 
</authentication> 

ve ekleme aşağıdaki:

<modules runAllManagedModulesForAllRequests="true"> 
    <remove name="FormsAuthentication" /> 
</modules> 

Zaten Kullanıcı giriş temelde çekler yönetmek için ApiController var veritabanına karşı kimlik bilgileri ve kimlik bilgileri geçerli değilse, kullanıcı veya 401 döndürür.

Membership ve Authorization API'yi uygulamam gerektiğini okudum, ancak sıfırdan yapmama yardımcı olan hiçbir şey bulamadım. Herhangi bir fikrin var mı? Veritabanındaki çerezleri ve kimlik kodlarını yönetmem gerekiyor mu yoksa benim için FormsAuthentication'a benzer bir sınıf var mı?

cevap

3

Bir çözüm buldum, yalnızca Microsoft tarafından example'da gösterilen geçici çözümü kullandım.

  1. App_Start adlı bir klasör oluşturun.
  2. twoclasses'u uygun ad alanlarına yerleştirin.
  3. Form Kimlik Doğrulaması ve eklenen istek/yanıt işleme sistemi geri kalanını yapacaktır.

    private void OnEndRequest(object source, EventArgs args) 
        { 
         var context = (HttpApplication)source; 
         var response = context.Response; 
    
         if (context.Context.Items.Contains("__WEBAPI:Authentication-Fixup")) 
         { 
          response.StatusCode = (int)context.Context.Items[FixupKey]; 
          response.RedirectLocation = null; 
          // Clear the page content, since I don't want the "Content moved here." body 
          response.ClearContent(); 
         } 
        } 
    

    Kaynaklar:

, ben OnEndRequest yöntemini bu şekilde düzenledikten

2

Bunu denetleyin project on github. ASP.NET Web API'sine güvenlik eklemek için örneklerle bazı sınıflar geliştirdiler. Desteklenen güvenlik modellerinden biri, temel kimlik doğrulamasıdır; bu, sorunuzda açıkladığınız şey gibi görünür.

+0

İlk örneğe ihtiyacım var gibi görünüyor, 'BasicAuthentication'. Ama henüz bir veri tabanında saklamak için bir yol olup olmadığını (istemcide kullanıcı adı ve parola istemciye authcode olarak göndermeyeceğim) anlayamadım. – frapontillo

+0

"Kimlik kodunu saklamanın bir yolu" ile ne demek istediğini anladığımdan emin değilim. Kimlik doğrulamanıza ilişkin açıklamanız nedir? Temel kimlik doğrulama ile, kullanıcı adı/şifreyi kodlamak ve diğer uçta şifresini çözmek istiyorsunuz.Ayrıca tüm mesajı tel üzerinde şifrelemek için HTTPS/SSL/TSL'yi temel kimlik doğrulama ile kullanmak istersiniz. Şifreleri bir DB'ye kaydederken saklanan parola için her zaman tek yönlü bir şifreleme kullanırım. Daha sonra, DB'de neyin bir karşılaştırmasını yapmadan önce kullanıcı şifresi üzerinde aynı şifrelemeyi kullanırsınız. –

+0

Her giriş için geçici bir kimlik kodu oluşturmak ve bir veritabanında saklamak istiyorum. Benim düşündüğüm, FormsAuthentication'ın yaptığı şeyle aynıdır: Kayıtlı kullanıcıya sıkı sıkıya bağlı bir oturum yetkilendirme kodu oluşturur. – frapontillo