Kimlik yenileme ve expiry
Yeni credential’ı doğrulayın, revision kontrollü kimlik değişimi uygulayın ve süresi dolan bağlantıyı yönetin.
Uzun yaşayan bir bağlantının credential'ı bağlantı kapanmadan yenilenebilir. Lily güncellemeyi revision ile koşullu uygular; credential doğrulaması yine uygulamanızın verifier'ına aittir.
Revision’ı önce okuyun#
context.identity_snapshot() sonucundaki revision'ı async doğrulamaya başlamadan önce alın. Verifier yeni credential'ı doğruladıktan sonra replacement kimliği bu revision ile yayımlayın:
use lilyrs::websocket::{AuthenticatedWebSocketIdentity, Principal, WebSocketContext,
WebSocketIdentityUpdateOutcome};
async fn publish_verified_identity(
context: &WebSocketContext,
observed: lilyrs::websocket::WebSocketIdentityRevision,
verified_principal: Principal,
expiry: tokio::time::Instant,
) -> Result<WebSocketIdentityUpdateOutcome, Box<dyn std::error::Error>> {
let replacement = AuthenticatedWebSocketIdentity::try_new(verified_principal)?
.expires_at(expiry);
Ok(context.reauthenticate(observed, replacement).await?)
}Yardımcı fonksiyon token doğrulamaz. verified_principal ve expiry, gerçek doğrulama sonucudur. Revision'ı doğrulamadan sonra okumak, eski bir doğrulama sonucunun aradaki yeni kimliği ezmesine yol açabilir.
Güncelleme sonucunu ele alın#
| Sonuç | Anlamı | Uygulama kararı |
|---|---|---|
Updated(new_revision) |
Replacement yayımlandı | Yeni revision'ı kullanın |
Stale(current_revision) |
Arada daha yeni kimlik yayımlandı | Eski sonucu otomatik retry ile zorlamayın |
AlreadyClosing |
Bağlantı kapanıyor | Yeni oturum işi başlatmayın |
Refresh action'ınızı açıkça tanımlayıp credential'ı nasıl taşıyacağınıza karar verin. Lily hazır refresh endpoint'i veya OIDC akışı üretmez. Güncelleme başarısını istemciye bildirmek için ACK sözleşmesini kullanabilirsiniz.
Mesaj snapshot’ı ve local veri#
Her mesaj Principal'ı bir kez snapshot olarak alır. İşlenmekte olan mesajın middleware, guard ve action'ı aynı kimliği görür; başarılı refresh sonraki mesajlara yansır. Original handshake Principal'ı audit görünümünde ilk kimlik olarak kalır.
Connection locals bu API ile yeniden yazılmaz. Yenilenebilir yetkiyi immutable tenant local'i içine gömmek yerine güncel kimlik ve uygulama servisi üzerinden değerlendirin. Principal hedefleri güncel index'i kullanır.
Süre dolması#
expires_at bir tokio::time::Instant alır; epoch timestamp değildir. Geçmiş deadline kabul edilmez. Süre dolduğunda ilgili revision hâlâ yetkiliyse principal index üyeliği kaldırılır, yeni mesaj/yayın kabulü sona erer ve 1008, lily.v2.identity_expired ile kapanış denenir.
Eski revision timer'ı yeni kimliğin süresini sonlandıramaz. Identity middleware kurulmamışsa bu expiry ve principal index lifecycle'ı da kurulmaz. Uygulamanın session revocation veya refresh servisleri, kendi veri kaynağındaki durumu ayrıca denetler.
Bu sayfanın kaynakları v0.1.0
Anlatım, incelenen framework commit’ine dayanır.