TypeScript - RefreshToken ไม่กำหนดหลังจากการยืนยันตัวตน ServiceStack สำเร็จ
- ServiceStack เวอร์ชัน 5.0
- ServiceStack Typescript Client เวอร์ชัน 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 ด้วย Custom AuthProvider ให้แน่ใจว่าคุณได้ตั้งค่า การตรวจสอบสิทธิ์ถูกดำเนินการด้วย:
authService.Request.Items[Keywords.DidAuthenticate] = true;
การสนับสนุนสำหรับ JWT RefreshTokens ยังต้องการ AuthRepository ที่ลงทะเบียนแล้วด้วย
หากคุณกำลังใช้ Custom AuthProvider โดยไม่มี IAuthRepository ฉันเพิ่งเพิ่มการสนับสนุนสำหรับการใช้งาน IUserSessionSource เป็นแหล่งทางเลือกในการเติม Sessions ใน JWT Tokens ใหม่ ซึ่งคุณสามารถใช้งานโดยการลงทะเบียนใน IOC ของคุณหรือให้ Custom AuthProvider ของคุณใช้งาน:
public interface IUserSessionSource
{
IAuthSession GetUserSession(string userAuthId);
}
การนำไปใช้งานควรส่งกลับ IAuthSession ที่มีข้อมูลเฉพาะเมื่อพวกเขาได้รับอนุญาตให้เข้าสู่ระบบ เช่น หากบัญชีของพวกเขาถูกระงับ ควรยกเว้นข้อผิดพลาดเช่น:
throw HttpError.Forbidden("User is suspended");
การสนับสนุน IUserSessionSource มีให้ตั้งแต่ ServiceStack v5 ซึ่งตอนนี้สามารถใช้งานได้บน MyGet กรุณาตรวจสอบการเปลี่ยนแปลงใน v5 ก่อนการอัปเกรด
