TL; DR
IdentityServer = OAuth 2.0 / OpenId-Connect aracılığıyla belirteç şifreleme ve doğrulama hizmetleri
ASP.NET Identity = ASP.NET'teki mevcut Kimlik Yönetimi stratejisi
.Net'in önceki sürümlerinde yapılana benzer şekilde nasıl kimlik doğrulaması yapabilirim eski yöntem hala çalışıyor veya daha yeni bir sürüm var mı?
ASP.NET Core'da eski yolu başaramamanız için hiçbir neden göremiyorum, ancak genel olarak bu strateji ASP.NET Identity ile değiştirildi ve ASP.NET Identity, ASP.NET Core'da canlı ve iyi.
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity
ASP.NET Identity, kullanıcı adı, parola (karma), e-posta, telefon gibi kullanıcı bilgilerini tutmak için SQL Server gibi bir destek deposu kullanır ve Ad, Soyad veya başka herhangi bir şeyi tutacak şekilde kolayca genişletilebilir. Dolayısıyla, kullanıcı bilgilerini bir tanımlama bilgisine şifrelemek ve istemciden sunucuya iletmek için hiçbir neden yoktur. Kullanıcı talepleri, kullanıcı jetonları, kullanıcı rolleri ve harici oturum açma gibi kavramları destekler. ASP.NET Identity'deki varlıklar:
- AspNetUsers
- AspNetUserRoles
- AspNetUserClaims
- AspNetUserLogins (Google, AAD gibi harici kimlik sağlayıcıları bağlamak için)
- AspNetUserTokens (kullanıcı tarafından biriktirilen access_tokens ve refresh_tokens gibi şeyleri depolamak için)
Kendi özel prensibinizi oluşturmak için kendi jeton sunucu dizilerinizi kullanmanın artıları ve eksileri nelerdir?
Bir belirteç sunucusu, Yetkilendirme ve / veya Kimlik Doğrulama bilgilerini içeren basit bir veri yapısı oluşturan bir sistem olacaktır. Yetkilendirme genellikle access_token adlı bir token alır . Bu, tabiri caizse "evin anahtarları" olacaktır, kapı aralığından geçip korunan bir kaynağın, genellikle bir web api'sinin evine girmenizi sağlar. Kimlik Doğrulama için, id_token
bir kullanıcı / kişi için benzersiz bir tanımlayıcı içerir. Erişim belirtecine böyle bir tanımlayıcı koymak yaygın olsa da, artık bunu yapmak için özel bir protokol var: OpenID-Connect .
Kendi Güvenlik Simgesi Hizmetinize (STS) sahip olmanın nedeni, bilgi varlıklarınızı kriptografi yoluyla korumak ve hangi müşterilerin (uygulamaların) bu kaynaklara erişebileceğini kontrol etmektir. Ayrıca, kimlik kontrolleri için standartlar artık OpenID-Connect belirtimlerinde mevcuttur. IdentityServer, OpenID-Connect Kimlik Doğrulama sunucusuyla birleştirilmiş bir OAuth 2.0 Yetkilendirme Sunucusu örneğidir.
Ancak uygulamanızda sadece bir kullanıcı tablosu istiyorsanız bunların hiçbiri gerekli değildir. Bir belirteç sunucusuna ihtiyacınız yoktur - sadece ASP.NET Identity kullanın. ASP.NET Identity, Kullanıcınızı sunucudaki ClaimsIdentity nesnesiyle eşler ; özel bir IPrincipal sınıfına gerek yoktur.
Bulut tabanlı bir çözüm veya ayrı bir Token sunucusu kullanırken, bunu mevcut uygulamanıza nasıl entegre edersiniz, yine de uygulamamda bir kullanıcı tablosuna ihtiyacım olur mu, ikisini nasıl ilişkilendirirsiniz?
Ayrı kimlik çözümlerini bir uygulama ile entegre etmek için şu öğreticilere bakın:
https://identityserver4.readthedocs.io/en/latest/quickstarts/0_overview.html
https://auth0.com/docs/quickstart/webapp/aspnet-core
En azından, kullanıcı adını harici sağlayıcının kullanıcı tanımlayıcısına eşleyen iki sütunlu bir tabloya ihtiyacınız olacaktır. AspNetUserLogins tablosunun ASP.NET Identity'de yaptığı şey budur. Ancak bu tablodaki satırlar AspNetUsers'da bir Kullanıcı kaydı olmasına bağlıdır.
ASP.NET Identity, Google, Microsoft, Facebook gibi harici sağlayıcıları destekler, herhangi bir OpenID-Connect sağlayıcısı, Azure AD zaten oradadır. (Google ve Microsoft zaten OpenID-Connect protokolünü uygulamıştır, bu nedenle örneğin bunun gibi özel entegrasyon paketlerine de ihtiyacınız yoktur ). Ayrıca ADFS, ASP.NET Core Identity'de henüz kullanılamamaktadır.
ASP.NET Identity'de harici sağlayıcılarla başlamak için bu belgeye bakın:
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/
Pek çok farklı çözüm olduğu için, diğer SSO'lara genişlemeye devam ederken Gmail / Facebook üzerinden Giriş yapmanıza izin vermek için kurumsal bir uygulamayı nasıl oluşturabilirim
Yukarıda açıklandığı gibi, ASP.NET Identity bunu zaten yapıyor. "Harici Sağlayıcılar" tablosu oluşturmak oldukça kolaydır ve harici oturum açma sürecinizi veri yönlendirir. Bu nedenle, yeni bir "SSO" geldiğinde, sağlayıcının url'si, müşteri kimliği ve size verdikleri sır gibi özellikleri içeren yeni bir satır ekleyin. ASP.NET Identity zaten Visual Studio şablonlarında yerleşik kullanıcı arabirimine sahiptir, ancak daha soğuk düğmeler için Sosyal Oturum Açma bölümüne bakın .
Özet
Yalnızca parola oturum açma özelliklerine ve bir kullanıcı profiline sahip bir kullanıcı tablosuna ihtiyacınız varsa, ASP.NET Identity mükemmeldir. Dış yetkilileri dahil etmeye gerek yok. Ancak, birçok API'ye erişmesi gereken birçok uygulama varsa, kimlik ve erişim belirteçlerini güvence altına almak ve doğrulamak için bağımsız bir otorite mantıklıdır. IdentityServer iyi bir seçimdir veya bir bulut çözümü için openiddict-core veya Auth0'a bakın.
Özür dilerim, bu hedefe ulaşmak değil ya da çok tanıtıcıysa. Lütfen aradığınız hedefe ulaşmak için etkileşimde bulunmaktan çekinmeyin.
Ek: Çerez Kimlik Doğrulaması
Tanımlama bilgileriyle çıplak kemik kimlik doğrulaması yapmak için aşağıdaki adımları izleyin. Ancak, bildiğim kadarıyla bir özel talepler müdürü desteklenmiyor. Aynı etkiyi elde etmek için, ClaimPrincipal
nesnenin Talepler listesini kullanın .
İletişim kutusunda "Kimlik Doğrulaması Yok" seçeneğini seçerek Visual Studio 2015 / 2017'de yeni bir ASP.NET Core 1.1 Web Uygulaması oluşturun. Ardından paketi ekleyin:
Microsoft.AspNetCore.Authentication.Cookies
Altında Configure
içinde yönteme Startup.cs
yerde bu (önceki app.UseMvc
):
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationScheme = "MyCookieMiddlewareInstance",
LoginPath = new PathString("/Controller/Login/"),
AutomaticAuthenticate = true,
AutomaticChallenge = true
});
Ardından bir oturum açma kullanıcı arabirimi oluşturun ve html Formunu aşağıdaki gibi bir Eylem Yöntemine gönderin:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(String username, String password, String returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, username),
new Claim("FirstName", "Alice"),
new Claim("LastName", "Smith")
};
var identity = new ClaimsIdentity(claims, "Password");
var principal = new ClaimsPrincipal(identity);
await HttpContext.Authentication.SignInAsync("MyCookieMiddlewareInstance", principal);
return RedirectToLocal(returnUrl);
}
ModelState.AddModelError(String.Empty, "Invalid login attempt.");
return View();
}
HttpContext.User nesnesi, özel taleplerinize sahip olmalıdır ve ClaimPrincipal.
Umarım bu yeterlidir, çünkü tam bir Çözüm / Proje bir StackOverflow gönderisi için biraz fazla görünmektedir.