Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Buradan başlamadan önce oturum açmayı ve belirteçleri almayı anladığınızdan emin olun.
MSAL.js kullanırken, kullanıcılar adına belirteç almanın sonuçlarını ve bu belirteçlerin geçerlilik sürelerini nasıl yöneteceğinizi anlamanız gerekir.
Belirteç Yaşam Süreleri ve Süre Sonu
Microsoft kimlik platformu tarafından verilen erişim, kimlik veya Güvenlik Onaylama İşaretleme Dili (SAML) belirteçlerinin belirteç ömürlerini yapılandırabilirsiniz. Bilgilerin bazıları aşağıda özetlenmiştir.
Kimlik belirteçleri
Kimlik belirteçleri, hesap ve istemcinin belirli bir bileşimine bağlıdır ve genellikle kullanıcı hakkındaki profil bilgilerini içerir. Genellikle, bir web uygulamasının kullanıcı oturumu ömrü kimlik belirteci oturum ömrüyle eşleşecektir ve bu da varsayılan olarak 24 saattir. Belirteç yaşamlarını yapılandırma hakkında daha fazla bilgi edinebilirsiniz.
Erişim belirteçleri
Tarayıcıdaki erişim belirteçlerinin varsayılan olarak önerilen süre sonu 1 saattir. Bu 1 saat sonra süresi dolan belirteci taşıyan tüm çağrılar reddedilir. Bu belirteç, bununla alınan yenileme belirteci kullanılarak sessizce yenilenebilir. Belirteç yaşamlarını yapılandırma hakkında daha fazla bilgi edinebilirsiniz.
Belirteçleri yenileme
Single-Page Uygulamalarına verilen yenileme belirteçleri sınırlı süreli yenileme belirteçleridir (genellikle alma zamanından itibaren 24 saat). Bu, ayarlanamayan, kaydırılamayan, ömür boyu kullanılan bir penceredir. Bir erişim belirtecini yenilemek için yenileme belirteci kullanıldığında, yenilenen erişim belirteci ile yeni bir yenileme belirteci getirilir. Bu yeni yenileme belirtecinin ömrü, özgün yenileme belirtecinin kalan ömrüne eşit olacaktır. Yenileme belirtecinin süresi dolduktan sonra, yetkilendirme kodunu almak ve yeni bir belirteç kümesiyle takas etmek için yeni bir yetkilendirme kodu akışı başlatılmalıdır.
Not: Yeni bir yenileme belirteci elde edildiğinde, msal.js önbelleğe alınan yenileme belirtecini yeni yenileme belirteci ile değiştirir, ancak eski yenileme belirteci sunucu tarafından geçersiz kılınmıyor ve süresi dolana kadar erişim belirteçlerini almak için hala kullanılabilir.
Jeton Yenileme
PublicClientApplication nesnesi, süresi dolmamış belirteci sessizce almaya yönelik adlı acquireTokenSilent bir API'yi kullanıma sunar. Bunu birkaç adımda yapar:
- Belirtilen
scopes,client idauthorityve/veyahomeAccountIdentifieriçin belirteç önbelleğinde bir belirtecin zaten var olup olmadığını denetleyin. - Belirtilen parametreler için bir belirteç varsa, tek bir eşleşme bulunduğundan emin olun ve geçerlilik süresini kontrol edin.
- Erişim belirtecinin süresi dolmadıysa, MSAL ilgili belirteçlerle birlikte bir yanıt döndürür.
- Erişim belirtecinin süresi dolduysa ancak yenileme belirteci hala geçerliyse, MSAL yeni bir belirteç kümesi almak için verilen yenileme belirtecini kullanır ve ardından bir yanıt döndürür.
- Yenileme belirtecinin süresi dolduysa, MSAL gizli bir iframe kullanarak erişim belirteçlerini sessizce almayı dener. Bu, kullanıcının oturumuna ilişkin bir ipucu elde etmek için hesabın claim nesnesinde yer alan sid veya username’i kullanır. Bu gizli iframe çağrısı başarısız olursa, MSAL sunucudan gelen bir hatayı
InteractionRequiredAuthErrorolarak iletir ve yeni bir belirteç kümesi almak için bir yetkilendirme kodunun alınmasını ister. Bunu,PublicClientApplicationnesnesiyle bir login veya acquireToken API çağrısı gerçekleştirerek yapabilirsiniz. Oturum hâlâ etkinse, sunucu kullanıcıya herhangi bir istem gösterilmeden bir kod gönderecektir. Aksi takdirde, kullanıcının kimlik bilgilerini girmesi gerekir.
Yöntemi için ayarlayabileceğiniz yapılandırma parametreleri hakkında daha fazla bilgi için istek ve yanıt nesneleri makalesine acquireTokenSilent bakın.
Kullanıcının oturumunun ortasında etkileşimli kesintileri önleme
Bazı durumlarda, kullanıcının oturumunun başında, belirteçleri sessizce almaya ve uygulamanızı daha fazla kesintiye uğramadan kullanmaya devam etmelerini sağlamak için gerekirse etkileşimi önceden çağırmak isteyebilirsiniz. Tabii ki, uygulamanız ilk kez yüklendiğinde etkileşimi çağırarak bunu başarabilirsiniz; ancak bu, bir kullanıcı önceki oturumdan veya başka bir pencereden/sekmeden belirteçlere sahip olduğunda kötü bir kullanıcı deneyimidir ve daha az performanslıdır. Bunun yerine, önbelleğin rastgele bir süre boyunca sessizce döndürülmesi için gerekli belirteçlere sahip olduğundan emin olmak için kullanabileceğiniz acquireTokenSilent birkaç istek parametresiyle.
acquireTokenSilent öğesinin en az 1 saat boyunca geçerli belirteçler döndürebilmesini sağlamak için:
- Sayfa yüklendiğinde,
forceRefreshistek parametresitrueolarak ayarlanmış şekildeacquireTokenSilentçağrısı yapın. Bu, önbelleği atlayarak yeni bir belirteç edinir; bu belirteç daha sonra sonraki çağrılarda önbellekten sağlanabilir. - Sonraki çağrılarda, belirteçlerin önbellekten sunulabilmesini sağlamak için
forceRefreshayarlanmamış bırakın veya açıkçafalse.
En az 24 saate kadar geçerli belirteçler döndürebilmesini sağlamak acquireTokenSilent için:
- Sayfa yüklenirken,
forceRefreshistek parametresitrueolarak verefreshTokenExpirationOffsetSecondsparametresi etkileşimsiz kalınacak istenen süreye (saniye cinsinden) ayarlanmış şekildeacquireTokenSilentöğesini çağırın. - Sonraki çağrılarda, belirteçlerin önbellekten alınabilmesini sağlamak için
forceRefreshverefreshTokenExpirationOffsetSecondsdeğerlerini ayarlanmamış bırakın
Örneğin, kullanıcının sonraki 2 saat boyunca sessizce belirteçler edinediğinden emin olmak istiyorsanız:
var request = {
scopes: ["Mail.Read"],
account: currentAccount,
forceRefresh: true,
refreshTokenExpirationOffsetSeconds: 7200 // 2 hours * 60 minutes * 60 seconds = 7200 seconds
};
const tokenResponse = await msalInstance.acquireTokenSilent(request).catch(async (error) => {
if (error instanceof InteractionRequiredAuthError) {
// fallback to interaction when silent call fails
await msalInstance.acquireTokenRedirect(request);
}
});
Not: Yenileme belirtecinin süresi henüz dolmamış olsa bile belirtecin sessizce alınabileceğinin garantisi asla yoktur. Yukarıda açıklanan desenler, uygunsuz zamanlarda etkileşimi en aza indirmeye yönelik en iyi çaba girişimleridir, ancak istenen zaman çerçeveleri içinde gerekli etkileşim olasılığını ortadan kaldırmaz. Ayrıca, tüm kimlik sağlayıcıları yenileme belirtecinin süre sonunu döndürmez; bu durumlarda refreshTokenExpirationOffsetSeconds istek parametresi değerlendirilmez.
Önbellek Arama İlkesi
İsteğe bağlı olarak, isteğe bir Önbellek Arama İlkesi belirtilebilir. Önbellek Arama İlkeleri şunlardır:
-
CacheLookupPolicy.Default-acquireTokenSilentönbellekten bir erişim belirteci almayı dener. Erişim belirtecinin süresi dolduysa veya bulunamazsa yeni bir belirteç almak için yenileme belirteci kullanılır. Son olarak, yenileme belirtecinin süresi dolduysa,acquireTokenSilentsessizce yeni bir erişim belirteci, kimlik belirteci ve yenileme belirteci almaya çalışır. -
CacheLookupPolicy.AccessToken-acquireTokenSilentyalnızca önbellekte erişim belirteçlerini arar. Erişim veya yenileme belirteçlerini yenilemeye çalışmaz. -
CacheLookupPolicy.AccessTokenAndRefreshToken-acquireTokenSilentönbellekten bir erişim belirteci almayı dener. Erişim belirtecinin süresi dolduysa veya bulunamazsa, yeni bir belirteç almak için yenileme belirteci kullanılır. Yenileme belirtecinin süresi dolduysa, yenilenmez veacquireTokenSilentbaşarısız olur. -
CacheLookupPolicy.RefreshToken-acquireTokenSilentönbellekten erişim belirteçlerini almayı denemez ve bunun yerine önbelleğe alınan yenileme belirtecini yeni bir erişim belirteci için değiştirme girişiminde bulunur. Yenileme belirtecinin süresi dolduysa, yenilenmez veacquireTokenSilentbaşarısız olur. -
CacheLookupPolicy.RefreshTokenAndNetwork-acquireTokenSilenterişim belirtecinin önbelleğine bakmaz. Önbelleğe alınmış yenileme belirteciyle doğrudan ağa bağlanır. Yenileme belirtecinin süresi dolduysa yenileme girişiminde bulunulacaktır. Bu,forceRefresh: trueayarını ayarlamaya eşdeğerdir. -
CacheLookupPolicy.Skip-acquireTokenSilenthem erişim hem de yenileme belirteçlerini yenilemeyi dener. Önbellekte görüntülenmez. Üçüncü taraf tanımlama bilgileri tarayıcı tarafından engellenirse bu her zaman başarısız olur.
Kod Parçacıkları
Popup
var username = "test@contoso.com";
var currentAccount = msalInstance.getAccount({ username });
var silentRequest = {
scopes: ["Mail.Read"],
account: currentAccount,
forceRefresh: false,
cacheLookupPolicy: CacheLookupPolicy.Default // will default to CacheLookupPolicy.Default if omitted
};
var request = {
scopes: ["Mail.Read"],
loginHint: currentAccount.username // For v1 endpoints, use upn from idToken claims
};
const tokenResponse = await msalInstance.acquireTokenSilent(silentRequest).catch(async (error) => {
if (error instanceof InteractionRequiredAuthError) {
// fallback to interaction when silent call fails
return await msalInstance.acquireTokenPopup(request).catch(error => {
if (error instanceof InteractionRequiredAuthError) {
// fallback to interaction when silent call fails
return msalInstance.acquireTokenRedirect(request)
}
});
}
});
Redirect
var username = "test@contoso.com";
var currentAccount = msalInstance.getAccount({ username });
var silentRequest = {
scopes: ["Mail.Read"],
account: currentAccount,
forceRefresh: false,
cacheLookupPolicy: CacheLookupPolicy.Default // will default to CacheLookupPolicy.Default if omitted
};
var request = {
scopes: ["Mail.Read"],
loginHint: currentAccount.username // For v1 endpoints, use upn from idToken claims
};
const tokenResponse = await msalInstance.acquireTokenSilent(silentRequest).catch(error => {
if (error instanceof InteractionRequiredAuthError) {
// fallback to interaction when silent call fails
return msalInstance.acquireTokenRedirect(request)
}
});
Sonraki Adımlar
Oturumu kapatma işlemini nasıl gerçekleştireceğinizi öğrenin.