我有一个物品服务:
[Authenticate]
public class ItemService : ServiceStack.Service {
//implementation
}
在ItemService中,我正在调试此Get方法,该方法已收到有效令牌并能够成功创建会话:
public GetItemResponse Get(GetItem request)
{
var session = SessionAs<CustomUserSession>();
var authToks1 = session.GetAuthTokens();//empty
var authToks2 = session.GetAuthTokens(_authServiceConnection);//null
var authService = new JsonServiceClient(_authServiceConnection);
//not authorized
ConvertSessionToTokenResponse attempt1 = authService.Send(new ConvertSessionToToken());
//not authorized
ConvertSessionToTokenResponse attempt2 = authService.Send(new ConvertSessionToToken() { PreserveSession = true });
var accountService = new JsonServiceClient(_accountServiceConnection)
{
BearerToken = "what to do",
RefreshToken = "what to do"
};
return new GetItemResponse();
}
显然,我只是想调用另一项服务,AccountService
:
[Authenticate]
public class AccountService : ServiceStack.Service {
//implementation
}
如何在从一个授权服务到具有ServiceStack Authenticate
属性的另一个服务的请求中包含JWT刷新令牌或JWT承载令牌。
注意我使用的是自定义Auth提供程序,我有一个旧数据库。
答案 0 :(得分:2)
如果这个具有相同主机的另一个ServiceStack服务应该使用Service Gateway,因为内部请求会直接执行,这会避免请求过滤器验证。
var response = Gateway.Send(new MyRequest());
如果您正在尝试呼叫远程ServiceStack服务,您可以使用IRequest.GetJwtToken()
扩展方法获取与请求一起发送的JWT令牌,并将其转发到下游服务请求:
var accountService = new JsonServiceClient(_accountServiceConnection)
{
BearerToken = Request.GetJwtToken(),
};