2014-09-14 16 views
5

Entity Framework, WebAPI, ASP.NET Identity kullanarak çok kiracılı bir uygulama oluşturdum. Temel olarak, kiracının alt etki alanını okur ve onu kullanarak veritabanından bağlantı dizesini okur ve çalışma zamanına ayarlar.ASP.NET Kimlik + Taşıyıcı Jetonu + Çoklu Kiracı

Her şey harika, veritabanı vb. Yaratıyor, ancak tek sorun şu anda ASP.NET Identity Bearer Token.

http://tenant1.#####.com/token için bir taşıyıcı erişim belirteci oluşturduğumda, belirteç aynı uygulamada (makine anahtarı belirtilmemiş) imzalanmış gibi görünüyor ve http://tenant2.#####.com denetleyicilerine de erişim izni veriyor. Farklı alt alanlar/kiracılar gibi.

Bunun etrafında herhangi bir yolu var mı? Ya da belki de ASP.NET Kimliğine değil, diğer Güvenlik Çerçevesine bakmalı mıyım?

+0

Jetonların üzerinde kontrolü ele geçirip, kiracı adına özel bir veri eklemeniz gerekir. Jetonlar iddialara dayandığından bu mümkün olmalıdır. Ardından, geçerli kiracının simgeden biriyle eşleşip eşleşmediğini doğrulamak için her istek üzerine başka bir kontrol edin. Bu kontrol örneğin özel bir http modülünde yapılabilir. –

+0

Merhaba, bu senaryoda hak talepleri "güvenli" bir yaklaşım mıdır? Çünkü tek yapmamız gereken, doğru bir kiracı iddiasıyla bir jetonu taklit edebilmektir ve talep geçebilir mi? –

+0

İstemci tarafında bir jetonu taklit edemezsiniz. –

cevap

3

MVC5, kullanıcı kimliğine bir kiracı adı talebi eklemeyi kolaylaştırır. modelleri dizininde, IdentityModels.cs içinde ApplicationUser sınıfı: düzenlemek doğrulanmış bir istek işlendiğinde

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) 
{ 
    // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 
    var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 

    // Add claim for tenant name 
    userIdentity.AddClaim(new Claim("tenantName", "abcCompany"); 

    // Add custom user claims here 
    return userIdentity; 
} 

Daha sonra, kullanıcı doğru talebi ve değeri içerdiğini doğrulamaktadır.

+0

Kiracı ismini bir iddia olarak eklediğiniz noktadan nasıl edineceğinize dair bir örnek almak mümkün mü? Şu anda buna bakarak ama aynı zamanda SignInManager içindeki her şeyi geçersiz kılmaya çalışmaktan kaçınmaya çalışıyorum. –

+0

Kullanıcıya nasıl bir şey yapıyorum –

+0

Uygulamanıza bağlı. Kiracı adı, isteğin alt alanına, bir çerez değerine dayanabilir veya kullanıcı tarafından açıkça sağlanabilir. Değere erişirken, IPrincipal ve IIdentity'yi uygulamak için ASP.NET'in kullandığı aynı modeli kullanıyorum. Dahili olarak, IPrincipal mevcut kullanıcı için istek başına bir referansa sahiptir. –

İlgili konular