typescript - RefreshToken odefinierad efter lyckad autentisering ServiceStack


  • ServiceStack Version 5.0
  • ServiceStack Typescript-klient Version 0.0.40

Följande kod anropar min Auth-mikrotjänst och autentiserar framgångsrikt en användare och returnerar deras bärartoken:

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);
})

Problemet är att det inte finns någon uppdateringstoken som returneras från min Auth-mikrotjänst:

Min konfiguration för min Auth-mikrotjänst:

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
    }));

Svar #1

Om du överskrider CredentialsAuthProvider med en anpassad AuthProvider, se till att du också anger Authentication utfördes med:

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

Stöd för JWT RefreshTokens kräver också ett registrerat AuthRepository.

Om du använder en anpassad AuthProvider utan ett IAuthRepository har jag precis lagt till stöd för att implementera IUserSessionSource som en alternativ källa för att fylla Sessions i nya JWT-token, vilket du kan använda genom att registrera det i din IOC eller låta din anpassade AuthProvider implementera:

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

Implementeringen bör endast returnera en ifylld IAuthSession om de har tillåtelse att logga in, t.ex. om deras konto är avstängt bör det kasta ett undantag som:

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

Stöd för IUserSessionSource är tillgängligt från ServiceStack v5 som nu finns på MyGet. Vänligen granska förändringarna i v5 innan uppgradering.