Nasıl bir kullanıcı doğrulamak için giriş ekranından birkaç saat Googling sonra benim ApiController yöntemleri üzerinde Authorize özniteliğini kullanmaya kadar nasıl doğru bir örnek bulmak mümkün değildi şaşırdım.
Çünkü bu iki kavram hakkında kafanız karışıyor:
Kimlik doğrulama, sistemlerin kullanıcılarını güvenli bir şekilde tanımlayabilecekleri mekanizmadır. Kimlik doğrulama sistemleri şu sorulara cevap verir:
- Kullanıcı kim?
- Kullanıcı gerçekten kendisini temsil ettiği kişi mi?
Yetkilendirme, bir sistemin, kimliği doğrulanmış belirli bir kullanıcının sistem tarafından denetlenen güvenli kaynaklara erişim düzeyini belirlemesi için gerekli olan mekanizmadır. Örneğin, bir veritabanı yönetim sistemi, belirli kişilere bir veritabanından bilgi alma, ancak datbase'de depolanan verileri değiştirme yeteneğine sahip olmamakla birlikte diğer kişilere veri değiştirme yeteneği kazandıracak şekilde tasarlanabilir. Yetkilendirme sistemleri şu sorulara cevaplar sağlar:
- X kullanıcısı R kaynağına erişme yetkisine sahip mi?
- X kullanıcısı P işlemini yapmaya yetkili mi?
- X kullanıcısı, R kaynağında P işlemini gerçekleştirme yetkisine sahip mi?
AuthorizeMVC nitelik örneğin, erişim kurallarını uygulamak için kullanılır:
[System.Web.Http.Authorize(Roles = "Admin, Super User")]
public ActionResult AdministratorsOnly()
{
return View();
}
Yukarıdaki kural sadece sağlayacak kullanıcıların Yönetici ve Süper Kullanıcı rolleri yöntemi erişmek için
Bu kurallar, locationöğe kullanılarak web.config dosyasında da ayarlanabilir . Misal:
<location path="Home/AdministratorsOnly">
<system.web>
<authorization>
<allow roles="Administrators"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
Ancak, bu yetkilendirme kuralları yürütülmeden önce , geçerli web sitesinde kimliğiniz doğrulanmalıdır .
Bunlar, yetkisiz isteklerin nasıl ele alınacağını açıklasa da, bunlar bir LoginController gibi bir şey göstermez veya kullanıcı kimlik bilgilerini istemek ve doğrulamak için böyle bir şey göstermez.
Buradan sorunu ikiye ayırabiliriz:
Aynı Web uygulamasında Web API hizmetlerini kullanırken kullanıcıların kimliğini doğrulama
Bu en basit yaklaşım olacaktır, çünkü ASP.Net'teki Kimlik Doğrulamaya güvenirsiniz.
Bu basit bir örnek:
Web.config
<authentication mode="Forms">
<forms
protection="All"
slidingExpiration="true"
loginUrl="account/login"
cookieless="UseCookies"
enableCrossAppRedirects="false"
name="cookieName"
/>
</authentication>
Kullanıcılar hesaba / giriş yoluna yönlendirilecek, orada kullanıcı kimlik bilgilerini istemek için özel kontroller yapacak ve ardından aşağıdakileri kullanarak kimlik doğrulama çerezini ayarlayacaksınız:
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
Platformlar arası kimlik doğrulama
Bu durum, yalnızca Web uygulaması içinde Web API hizmetlerini açığa çıkarırken , hizmetleri tüketen başka bir istemciniz olur, istemci başka bir Web uygulaması veya herhangi bir .Net uygulaması olabilir (Win Formlar, WPF, konsol, Windows hizmeti, vb)
Örneğin, Web API hizmetini aynı ağ etki alanındaki başka bir web uygulamasından (intranet içinde) tüketeceğinizi varsayalım, bu durumda ASP.Net tarafından sağlanan Windows kimlik doğrulamasına güvenebilirsiniz.
<authentication mode="Windows" />
Hizmetleriniz İnternet'te görünürse, kimliği doğrulanmış belirteçleri her Web API hizmetine geçirmeniz gerekir.
Daha fazla bilgi için aşağıdaki makalelere yağmalayın: