2014-12-03 15 views
7

Thinktecture JWT kimlik doğrulaması kaynak sahibi akışını kullanarak, istemci tüketimi için JWT'nin hak taleplerini kullanıyorum. Sorum şu ki, kimlik sunucusunda hak talebinde bulunmak ve istemcide bir dizi olarak kodunu çözmek mümkündür.JWT'ye bir dizi olarak hak talebi ekliyor musunuz?

Dizi türü için ClaimTypeValues ​​yok. Geçici bir çözüm olarak

,

var user = IdentityServerPrincipal.Create(response.UserName, response.UserName); 
       user.Identities.First().AddClaims(
              new List<Claim>() 
             { 
              new Claim(ClaimTypes.Name, response.UserName), 
              new Claim(ClaimTypes.Email, response.Email), 
              new Claim(FullName, response.FullName), 
              new Claim(AuthorizedCompanies,JsonConvert.SerializeObject(response.AuthorizedCompanies)) 
             }); 
       return new AuthenticateResult(user); 

Ben AuthorizedCompanies için iddia ve istemci side.What bunu ayrıştırmak json dizi olarak iddiayı eklemek burada tasarım deseni Varsa nedir?

cevap

11

Kişisel deneyimden bahsetmişken, ValueType her zaman "String" yazdığında talep mağazalarıyla etkileşimde bulunmak daha kolaydır. Karmaşık bir türle uğraştığınızı bildiğinizde sezgisel karşıt görünebilir olsa da, en azından anlaşılması kolaydır.

Bu diziye yaklaştığım şekilde bir uygulama dizisi için numaralı başvuru kodunun talep türüne sahip olmasını istemesi ve her bir hak talebi türünün basit bir türde tutulmasıdır.

anlamında kullanılacaktır:

var authorizeCompanies = identity.FindAll(AuthorizedCompanies).Select(c => c.Value); 

Ve tabii

, ayrıca bu şekilde onları ekleyin:

identity.AddClaim(ClaimTypes.Name, response.UserName); 
identity.AddClaim(AuthorizedCompanies, "CompanyX"); 
identity.AddClaim(AuthorizedCompanies, "CompanyY"); 
identity.AddClaim(AuthorizedCompanies, "CompanyZ"); 

IdentityServer kutunun dışında bu modeli desteklemektedir. Böyle bir kimlik için bir belirteç oluştururken, bu talep için değerleri otomatik olarak bir dizi olarak yazar. > Bir değer -

{ 
    "aud": "Identity Server example/resources", 
    "iss": "Identity Server example", 
    "exp": 1417718816, 
    "sub": "1234", 
    "scope": ["read", "write"], // <-- HERE 
    "foo": ["bar", "baz"],  // <-- HERE TOO! 
    "nbf": 1417632416 
} 

istemlere Bu yaklaşım, tüm istemlerde tipte bir bire-bir eşleme vardır varsayarak zıttır.