如何从一个授权服务拨打到另一个需要授权的服务

时间:2017-12-02 00:50:53

标签: servicestack

我有一个物品服务:

[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提供程序,我有一个旧数据库。

1 个答案:

答案 0 :(得分:2)

如果这个具有相同主机的另一个ServiceStack服务应该使用Service Gateway,因为内部请求会直接执行,这会避免请求过滤器验证。

var response = Gateway.Send(new MyRequest());

如果您正在尝试呼叫远程ServiceStack服务,您可以使用IRequest.GetJwtToken()扩展方法获取与请求一起发送的JWT令牌,并将其转发到下游服务请求:

var accountService = new JsonServiceClient(_accountServiceConnection)
{
    BearerToken = Request.GetJwtToken(),
};