2016-03-30 12 views
1

ve bende bir Talep türü olsun Nasıl yalnızca basit tip adını almak içinben Asp.Net Çekirdek ve ASP.NET Kimlik kullanıyorum kısa iddia tipi adını

"type":"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", 
"value":"123" 

gibi bir şey olsun, örneğin:

"type":"nameidentifier", 
"value":"123" 

Bunun mümkün olduğunu biliyorum, çözümü bulamıyorum.

+0

"Basit yazım adı" tanımlayın, lütfen. Aldığınız, iyi bilinen bir iddia türüdür ve bu adla devam etmesi gerekir. – n0rd

cevap

0

sen nameidentifier değeri elde etmek istiyoruz, kod:

User.FindFirst(ClaimTypes.NameIdentifier).Value 
+0

Sanırım beni özlüyorsun ... Aradığım şey, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/ adresinin yerine hak talebi türünün kısa adını almaktır. nameidentifier "Ben basitçe nameindentifier olurdu. Bunu yapmak için standart bir yol varsa emin değilim. –

+0

haklısın, yanlış anladım. –

0

System.IO.Path.GetFileName (claim.Type)

-1

bu

public static class ClaimsPrincipalExtentions 
{ 

    private const string ShortNameProperty = "http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/ShortTypeName"; 

    public static IEnumerable<Claim> GetClaimsByShortTypeName(this ClaimsPrincipal cp, string name) 
    { 
     return cp.Claims.Where(x => x.GetShortTypeName() == name); 
    } 

    public static string GetShortTypeName(this Claim claim) 
    { 
     string shortName; 
     return claim.Properties.TryGetValue(ShortNameProperty, out shortName) ? shortName : claim.Type; 
    } 

} 
+0

Soruyu anlayamıyorum emin değilim." ShortName sonra nerede izlenim altındaydı "doğru? " http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress "" emailaddress "i döndürür? kendi iddia türleriniz ve sabun kullanmamanız, yani (jwts), adınızı, belirteçlerinizi şişireceğinden kısa adı belirterek kullanmamalısınız. Bu nedenle Microsoft, kısa adı özellik değerini tanıttı. –

+0

1: Derleme Microsoft hak talebinde bulunan kısa adı bulmak istiyorsanız, yukarıda belirtilen kodu kullanın 2: Kendi iddialarınızı yapıyorsanız ve sabun ad alanı için bir nedeniniz yoksa, ' ad alanı ekleyiniz, iddianız hala geçerli olacaktır 3: Sabun ad alanına ihtiyacınız varsa, hak talebinin özellik çantasına "kısa ad" özelliğini ayarlamanız gerekir. Eğer jwts kullanıyorsanız, tokenler kısa ismi yerine tip dizgisi kullanılarak oluşturulmalıdır. –

1

aradığım deneyin Bu eski belgelerle karşılaştığımda bu cevap: https://identityserver.github.io/Documentation/docsv2/overview/mvcGettingStarted.html

Yaklaşık sayfadaki iddiaları incelediğinizde, iki şeyi fark edeceksiniz: bazı hak taleplerinde uzunca uzun yazım adları var ve muhtemelen uygulamanızda gerekenden daha fazla iddia var.

Uzun talep adları, Microsoft'un JWT işleyicisinden, bazı hak talep türlerini .NET’in ClaimType sınıf türleriyle eşleştirmeye çalışılıyor. Bu davranışı aşağıdaki kod satırıyla (Başlangıç) kapatabilirsiniz.

Bu aynı zamanda yeni benzersiz alt iddia tipine karşıtı CSRF koruması yapılandırmasını ayarlamak gerektiği anlamına gelmektedir

:

AntiForgeryConfig.UniqueClaimTypeIdentifier = Constants.ClaimTypes.Subject; 
JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>(); 

Ben müvekkilimin Startup.cs bu kodu eklenmiş ve kısaltılmış claimtypes.

İlgili konular