Có thể trả về phản hồi xác thực tùy chỉnh không? Tôi đã có nhà cung cấp xác thực tùy chỉnh của riêng mình kế thừa từ CredentialsAuthProvider.Trả về đối tượng phản hồi tùy chỉnh xác thực từ xác thực ServiceStack
Tôi muốn quay trở lại phiên ngày hết hạn trong phản ứng, vì vậy mà khách hàng biết chính xác khi nào phiên máy chủ của họ sẽ hết hạn:
{
"sessionId": "bG27SdxbRkqJqU6xv/gvBw==",
"userName": "[email protected]",
"sessionExpires": "2013-04-29T03:27:14.0000000",
"responseStatus": {}
}
tôi có thể ghi đè lên các phương pháp Authenticate như vậy:
public override object Authenticate(IServiceBase authService, IAuthSession session, Auth request)
{
// get base response
var response = base.Authenticate(authService, session, request);
// grab the session
var customSession = authService.GetSession() as CustomUserSession;
// if response can be cast and customSession exists
if (response is AuthResponse && customSession != null)
{
// cast
var authResponse = response as AuthResponse;
// build custom response
var customAuthResponse = new CustomAuthResponse
{
ReferrerUrl = authResponse.ReferrerUrl,
SessionExpiry = customSession.SessionExpires,
SessionId = authResponse.SessionId,
ResponseStatus = authResponse.ResponseStatus,
UserName = authResponse.UserName
};
return customAuthResponse;
}
// return the standard response
return response;
}
Tính năng này hoạt động tốt, ngoại trừ trường hợp phiên đã hoạt động. Trong trường hợp đó, các phương pháp kiểm tra AuthService bài viết cho một phiên hợp lệ và automatically returns a standard AuthResponse, và không có cách nào rõ ràng để ghi đè lên nó:
var alreadyAuthenticated = response == null;
response = response ?? new AuthResponse {
UserName = session.UserAuthName,
SessionId = session.Id,
ReferrerUrl = referrerUrl,
};
Tiếp theo ý tưởng Paaschpa của dưới đây, các lực lượng sau tái auth luôn luôn được tái xác nhận , nhưng có vẻ như có thể có những rủi ro liên quan đến việc để lại nhiều phiên hoạt động mở:
public override bool IsAuthorized(IAuthSession session, IOAuthTokens tokens, Auth request = null)
{
// force re-authentication. Not great, but no other obvious way to do this
if (request != null)
{
return false; // auth or re-auth calls
}
return base.IsAuthorized(session, tokens, request);
}
Có ai nghĩ cách tốt hơn để làm điều này không? Tôi có thể thực hiện AuthenticationService của riêng mình, nhưng tôi không chắc chắn làm thế nào tôi sẽ ghi đè lên AuthFeature?
Liệu một cái gì đó giống như sự giúp đỡ này? https://github.com/ServiceStack/ServiceStack/wiki/Sessions#using-typed-sessions-in-servicestack – paaschpa
@paaschpa thật đáng buồn là không. Giá trị phiên tùy chỉnh đó là một cái gì đó được giữ trên máy chủ. Tôi muốn hiển thị phản hồi xác thực tùy chỉnh. Nếu bất cứ điều gì nó là như thế này: http://stackoverflow.com/questions/13855996/how-to-change-http-401-response-in-servicestack nhưng cho một đăng nhập thành công, chứ không phải là một thất bại. – Junto