TypeScript - قيمة RefreshToken غير معرفة بعد نجاح المصادقة في ServiceStack


  • نسخة ServiceStack 5.0
  • عميل ServiceStack Typescript الإصدار 0.0.40

يقوم الكود التالي باستدعاء خدمة المصادقة الخاصة بي ويفعل مصادقة المستخدم بنجاح ويعيد رمز الحامل الخاص به:

var request = new Authenticate();
request.provider = "credentials";
request.userName = userName;
request.password = password;
request.useTokenCookie = true;

this.client.post(request)
.then(res => {
    if (res.bearerToken != null) {
    console.log('auth success', res);
    console.log('auth refresh token', res.refreshToken);
    resolve(true);
    }
    resolve(false);
}, msg => {
    console.log('log in failed');
    reject(msg);
})

المشكلة هي أنه لا يوجد رمز تحديث يتم إرجاعه من خدمة المصادقة الصغيرة الخاصة بي:

تكويني لخدمة المصادقة الصغيرة الخاصة بي:

Plugins.Add(new AuthFeature(() => new CustomUserSession(),
    new IAuthProvider[] {
        new JwtAuthProvider
        {
            HashAlgorithm = AuthSettings.HashAlgorithm,
            RequireSecureConnection = requireSecureConnection,
            AuthKeyBase64 = AuthSettings.JwtAuthKeyBase64,
            ExpireTokensIn        = TimeSpan.FromHours(_configuration["AuthSettings:ExpireTokensIn"].ToDouble()),
            ExpireRefreshTokensIn = TimeSpan.FromHours(_configuration["AuthSettings:ExpireRefreshTokensIn"].ToDouble()),
            CreatePayloadFilter = (payload,session) => {
                    payload["zipCode"] = ((CustomUserSession)session).ZipCode;
            },
            PopulateSessionFilter = AuthSettings.PopulateSessionFilterImplementation
        },
        new CustomCredentialsAuthProvider((ITsoContext)_serviceProvider.GetService(typeof(ITsoContext))) //HTML Form post of User/Pass
    }));

الإجابة رقم 1

إذا كنت تقوم بالكتابة فوق CredentialsAuthProvider باستخدام مزود مصادقة مخصص، فتأكد أيضًا من تعيين تم إجراء المصادقة باستخدام:

authService.Request.Items[Keywords.DidAuthenticate] = true;

دعم رموز التحديث JWT يتطلب أيضًا وجود AuthRepository مسجل.

إذا كنت تستخدم مزود مصادقة مخصص بدون IAuthRepository، فقد أضفت للتو دعمًا لتنفيذ IUserSessionSource كمصدر بديل لتعبئة الجلسات في رموز JWT الجديدة، والتي يمكنك استخدامها عن طريق تسجيلها في IOC الخاص بك أو جعل مزود المصادقة المخصص الخاص بك ينفذ:

public interface IUserSessionSource
{
    IAuthSession GetUserSession(string userAuthId);
}

يجب أن تعيد التنفيذ IAuthSession المملوءة فقط إذا كان مسموحًا لهم بتسجيل الدخول، أي إذا تم تعليق حسابهم يجب أن يطلق استثناء مثل:

throw HttpError.Forbidden("User is suspended");

الدعم لـ IUserSessionSource متاح من ServiceStack الإصدار 5 والذي أصبح متاحًا الآن على MyGet. يُرجى مراجعة تغييرات الإصدار 5 قبل الترقية.