Python için MSAL'de hataları ve özel durumları işleme

Python için MSAL'de hataların çoğu API çağrısından bir dönüş değeri olarak iletilir. Hata, Microsoft kimlik platformu JSON yanıtını içeren bir sözlük olarak temsil edilir.

  • Başarılı bir yanıt, "access_token" anahtarını içerir. Yanıtın biçimi OAuth2 protokolü tarafından tanımlanır. Daha fazla bilgi için bkz . 5.1 Başarılı Yanıt
  • Bir hata yanıtı "error" içerir ve genellikle "error_description". Yanıtın biçimi OAuth2 protokolü tarafından tanımlanır. Daha fazla bilgi için bkz . 5.2 Hata Yanıtı

Bir hata döndürüldüğünde, "error" anahtarı makine tarafından okunabilen bir kod içerir. "error" örneğin bir "interaction_required"ise, kimlik doğrulama işlemini tamamlamak için kullanıcıdan ek bilgi sağlamasını isteyebilirsiniz. "error" ise"invalid_grant", kullanıcıdan kimlik bilgilerini yeniden girmenizi isteyebilirsiniz. Aşağıdaki kod parçacığı, Python için MSAL'de hata işleme örneğidir.


from msal import ConfidentialClientApplication

authority_url = "https://login.microsoftonline.com/your_tenant_id"
client_id = "your_client_id"
client_secret = "your_client_secret"
scopes = ["https://graph.microsoft.com/.default"]

app = ConfidentialClientApplication(client_id, authority=authority_url, client_credential=client_secret)

result = app.acquire_token_silent(scopes=scopes, account=None)

if not result:
    result = app.acquire_token_silent(scopes=scopes)

if "access_token" in result:
    print("Access token: %s" % result["access_token"])
else:
    print("Error: %s" % result.get("error"))

Bir hata döndürülürse, "error_description" anahtar insan tarafından okunabilir bir ileti de içerir ve genellikle makine tarafından okunabilir bir "error_code" Microsoft kimlik platformu hata kodu içeren bir anahtar da vardır. Çeşitli Microsoft kimlik platformu hata kodları hakkında daha fazla bilgi için bkz. Kimlik doğrulama ve yetkilendirme hata kodları.

Python için MSAL'de özel durumlar nadirdir çünkü hataların çoğu bir hata değeri döndürülerek işlenir. ValueError özel durumu, yalnızca kitaplığı kullanma şeklinizle ilgili bir sorun olduğunda, örneğin API parametreleri hatalı biçimlendirilmişse, fırlatılır.

Koşullu Erişim ve talep sınamaları

Belirteçleri sessizce alırken, erişmeye çalıştığınız bir API için MFA ilkesi gibi bir Koşullu Erişim talep sınaması gerektiğinde uygulamanız hata alabilir.

Bu hatayı ele almak için kullanılan yöntem, MSAL kullanarak etkileşimli olarak bir belirteç edinmektir. Bu, kullanıcıdan gerekli Koşullu Erişim ilkesini karşılamasını ister ve bunu yapmasına olanak tanır.

Koşullu Erişim gerektiren bir API'yi çağırırken bazı durumlarda, API'den hatada bir talep sınaması alabilirsiniz. Örneğin, Koşullu Erişim ilkesi yönetilen bir cihaz (Intune) gerektiriyorsa hata AADSTS53000: Bu kaynağa erişmek için cihazınızın yönetiliyor olması gerekir veya benzeri bir şey olacaktır. Bu durumda, kullanıcının uygun ilkenin gereksinimlerini karşılaması istensin diye, claim bilgilerini belirteç alma çağrısında iletebilirsiniz.

Hatalar ve özel durumlardan sonra yeniden deneme

MSAL, Microsoft Entra hizmetine HTTP çağrıları yapar ve bazen hatalar oluşabilir. Örneğin ağ kapanabilir veya sunucu aşırı yüklenmiş olabilir.

MSAL Python 1.11+ sizin için otomatik olarak bir yeniden deneme girişimi gerçekleştirir. Özelleştirme yönergelerini http_clientizleyerek bu davranışı özelleştirebilirsiniz.

HTTP 429

Hizmet Belirteci Sunucusu (STS), çok fazla istek nedeniyle aşırı yüklendiğinde, Retry-After yanıt alanında ne kadar süre sonra yeniden deneyebileceğinize ilişkin bir ipucuyla birlikte HTTP 429 hatasını döndürür.

Uygulamanızın sonraki isteklerin hızını sınırlaması ve yalnızca belirtilen sürenin ardından yeniden denemesi bekleniyordu.

MSAL Python 1.16+, bir kimlik doğrulama isteğini isteğe bağlı olarak yeniden denemenizi kolaylaştırır (örneğin, son kullanıcı oturum açma düğmesine yeniden tıkladığında), MSAL Python 1.16+ aynı hata yanıtını bir HTTP önbelleğinden döndürerek ve yalnızca belirtilen süreden sonra bu çağrı denendiğinde gerçek bir HTTP çağrısı göndererek bu yeniden deneme girişimlerini otomatik olarak kısıtlar.

Varsayılan olarak, bu kısıtlama mekanizması kısıtlama bilgilerini yerleşik, bellek içi bir HTTP önbelleğine kaydederek çalışır. HTTP önbelleği olarak kendi dictbenzeri nesnenizi sağlayabilirsiniz. Bu nesnenin içeriğinin nasıl kalıcı olduğunu denetleyebilirsiniz. Diğer ayrıntılar için MSAL Python API belgelerine bakın.

Sonraki Adımlar