8

Owin Bearer Jetonlarını kullanan kullanıcıları yönetmek için Identity kullanan küçük bir Web API uygulamasına sahibim. Bu uygulamanın temelleri iyi çalışıyor: Kullanıcı kaydedebilir, bir kullanıcıyla giriş yapabilir ve [Authorize] ile işaretlenmiş Web API uç noktalarına erişebilirim.Web API ile Kimlik Yetkilendirmesi Öznitelik Rolleri

Bir sonraki adım, rolleri kullanarak Web API uç noktalarını sınırlamaktır. Örneğin, yalnızca Yönetici rolündeki kullanıcıların erişebileceği bir denetleyici. Yönetici kullanıcıyı aşağıdaki gibi oluşturdum ve bunları Yönetici rolüne ekliyorum. Ancak varolan denetleyicileri [Authorize]'dan [Authorize(Roles = "Admin")]'a güncelleştirdiğimde ve Adim hesabını kullanarak erişmeye çalıştığımda, bir 401 Unauthorized alırım.

//Seed on Startup 
    public static void Seed() 
    { 
     var user = await userManager.FindAsync("Admin", "123456"); 
     if (user == null) 
     { 
      IdentityUser user = new IdentityUser { UserName = "Admin" }; 
      var createResult = await userManager.CreateAsync(user, "123456"); 

      if (!roleManager.RoleExists("Admin")) 
       var createRoleResult = roleManager.Create(new IdentityRole("Admin")); 

      user = await userManager.FindAsync("Admin", "123456"); 
      var addRoleResult = await userManager.AddToRoleAsync(user.Id, "Admin"); 
     } 
    } 


    //Works 
    [Authorize] 
    public class TestController : ApiController 
    { 
     // GET api/<controller> 
     public bool Get() 
     { 
      return true; 
     } 
    } 

    //Doesn't work 
    [Authorize(Roles = "Admin")] 
    public class TestController : ApiController 
    { 
     // GET api/<controller> 
     public bool Get() 
     { 
      return true; 
     } 
    } 

S: kurmak ve rolleri kullanılacak doğru yolu nedir?


+0

Yönetici rolündeki doğru kullanıcı için yeni oluşturulan rol 'Yönetici' ve UserRole tablosu için Rol tablosunu kontrol ettiniz mi? Kimlik çerçevesi 2.0 veya üstü kullanıyor musunuz? – DSR

cevap

10

nasıl onlar seni yönteme GrantResourceOwnerCredentials

var identity = new ClaimsIdentity(context.Options.AuthenticationType); 
identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName)); 
identity.AddClaim(new Claim(ClaimTypes.Role, "Admin")); 
identity.AddClaim(new Claim(ClaimTypes.Role, "Supervisor")); 

içinde bu kod satırını eksik inanıyoruz giriş yaptığınızda kullanıcılar için iddialarını ayarlamak Ve do DB kullanımından kimliğini oluşturmak istiyorsanız aşağıda:

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager, string authenticationType) 
    { 
     // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 
     var userIdentity = await manager.CreateIdentityAsync(this, authenticationType); 
     // Add custom user claims here 
     return userIdentity; 
    } 

Sonra GrantResourceOwnerCredentials aşağıda yapın:

ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager, OAuthDefaults.AuthenticationType); 
+0

Bu, ancak nedenini anladığımdan emin değilim. Bunu “userManager.AddToRoleAsync” ile birleştirmem gerekiyor mu? Hibe, kullanıcı sadece bu Rol'e ait ise bir Kimlik için hak talepleri atamalı mıyım? Eğer bana bazı belgelere işaret ederseniz çok memnun olurum. Teşekkürler! –

+1

Cevabı güncelledi, lütfen kontrol edin –

+2

Hakaretler tokens'larına yeniyim, ancak sunucudan alınan tüm jetonların Yönetici ve yönetici rolünün atanmış olması gibi görünüyor. Kimlik için rollerin, bu kullanıcının sahip olduğu roller tarafından dinamik olarak getirilmemesi gerekir mi? – Mohag519

İlgili konular