ADFS userinfo endpoint ile allatclaims yerine ek claim'leri almak
ADFS'te ID token'ı küçük tutup ek claim'leri OpenID Connect userinfo endpoint'inden almanın yolu anlatılıyor. Claim kurallarının userinfo kaynağına nasıl tanımlanacağı ve ASP.NET Core OpenIdConnect ayarları ele alınıyor. Token audience hatası (MSIS9921) ve doğru token ayrımı da kritik noktalar arasında.
Kilit noktalar
- Userinfo endpoint adresi: https://<adfs-server>/adfs/userinfo; discovery belgesinde de yer alır.
- Varsayılan resource urn:microsoft:userinfo'dur, bu nedenle normal bir istekte allatclaims gerekmez.
- Dönen claim'ler urn:microsoft:userinfo resource'una eklenen issuance transform kurallarıyla belirlenir.
- ASP.NET Core'da options.GetClaimsFromUserInfoEndpoint = true ile claim'ler principal'a eklenir.
- Özel claim'ler için ClaimActions.MapJsonKey ile eşleme tanımlanmalıdır.
- API token'ı userinfo çağrısında kullanılmaz; iki token ayrı istenmelidir.
ADFS'te allatclaims scope'u tüm claim'leri ID token'a koyar; ancak grup üyelikleri arttıkça token büyür ve her istekte taşınır. Alternatif, ID token'ı küçük tutup ek claim'leri OpenID Connect userinfo endpoint'inden istemektir. Bu yaklaşımda uygulama erişim token'ını bearer olarak gönderir ve ADFS kullanıcıya ait claim'leri JSON olarak döndürür. Endpoint, ADFS'te urn:microsoft:userinfo kaynağına bağlıdır ve döndürülen claim'ler bu kaynağın issuance kurallarıyla belirlenir.
ASP.NET Core tarafında OpenIdConnect middleware'inde GetClaimsFromUserInfoEndpoint ayarını açmak yeterlidir; özel claim'ler için ClaimActions ile eşleme eklenir. Kritik nokta audience'tır: userinfo yalnızca kendi resource'u için düzenlenmiş token'ı kabul eder, API için alınan token burada kullanılamaz ve MSIS9921 hatası döner. Bu nedenle userinfo token'ı web uygulamasında kalır, API çağrıları için ayrı bir token istenir.
Gerçek dünyada kullanımı
- Çok sayıda grup üyeliği olan kurumsal bir ASP.NET Core web uygulamasında ID token'ı küçük tutmak.
- Kullanıcının yalnızca bazı sayfalarda ihtiyaç duyduğu LDAP özniteliklerini isteğe bağlı çekmek.
- Hem web arayüzü hem de Web API çağıran bir uygulamada ayrı token akışlarını yönetmek.
Neden önemli
ADFS ile OpenID Connect kullanan .NET ekipleri, token boyutunu azaltmak için userinfo yaklaşımını uygulayabilir. Audience kuralına uyulmazsa MSIS9921 hatasıyla karşılaşılır, bu yüzden API ve userinfo token'ları ayrı tutulmalıdır.
Benzer haberler
- ITicketStore ile ASP.NET Core kimlik doğrulama çerezini küçültmekBart Wullems (The Art of Simplicity)21 Eki
- React, .NET 10 ve Microsoft Foundry ile güvenli bir kurumsal chatDEV Community: #dotnet1 gün önce
- ASP.NET Core'da authentication ve authorization: ne zaman hangisi, güvenle nasıl yayına alınırDEV Community: #aspnetcore1 gün önce