当前位置: 首页 > 知识库问答 >
问题:

如何在Vert中转发jwt令牌。xRest服务

韶兴德
2023-03-14

我有一个顶点。x REST服务接收带有jwt令牌的请求,我想调用另一个传递接收到的令牌的REST服务。在路由器处理程序和WebClient调用之间,我有一个业务逻辑层。我的问题是,除了通过我的业务逻辑层显式地传递令牌之外,是否有其他方法可以向webClient提供令牌?换句话说,是否可以从vertxContext或其他组件中以某种方式检索我的RoutingContext和令牌?

示例代码演示了我想要实现的目标:

垂直cass

public class RestApiVerticle extends AbstractVerticle {

    businessLogicService service;

    @Override
    public void start() throws Exception {
        initService();

        HttpServer server = vertx.createHttpServer();
        Router router = Router.router(vertx);

        JWTAuth authProvider = JWTAuth.create(vertx, getAuthConfig());
        router.route("/*").handler(JWTAuthHandler.create(authProvider));

        router.route("/somePath").handler(this::handleRequest);

        server.requestHandler(router::accept).listen(config().getInteger("port"));
    }

    private void handleRequest(RoutingContext context){
        service.doSomeBusinessLogic(); //I could pass context here, but I thing this is not a proper way to do it, as business logic should not know about RequestContext
    }

    private void initService(){
        ExternalAPICaller caller = new ExternalAPICaller(WebClient.create(vertx));
        service = new BusinessLogicService(caller);
    }

    private JsonObject getAuthConfig() {
        return new JsonObject();
    }
}

BusinessLogicService:

public class BusinessLogicService {
    ExternalAPICaller caller;

    public BusinessLogicService(ExternalAPICaller caller){
        this.caller = caller;
    }

    public void doSomeBusinessLogic(){
        caller.doSth();
    }
}

外部APICaller:

公共类ExternalAPICaller{WebClient客户端;

public ExternalAPICaller(WebClient client){
    this.client = client;
}

public void doSth(){
    String TOKEN = null; // I would like to retrive here my token from some vertx component

    client.post("externalAPIpath")
        .putHeader("Authorization", "Bearer" + TOKEN)
        .send(ctx -> {
            //(..)
        });
}

}

共有2个答案

顾嘉良
2023-03-14

当您调用do业务逻辑方法时,您可以传递请求授权标头值,因为它包含您未触及的jwt令牌。然后在您的Web客户端上添加一个具有该值的标头,当然命名为授权,您的令牌将转发到下一个服务。

李招
2023-03-14

我的实现是在JavaScript(Node.js/Express),但我使用cookie将JWT发送到客户端

res.cookie("auth", token);
return res.redirect(`http://localhost:3000/socialauthredirect`);
 类似资料:
  • 我想解码我使用Postman收到的jwt令牌,并在RESTAPI中实现它。我该怎么做?我看到有人发布代码来解码jwt令牌(参考:如何在不使用库的情况下在javascript中解码jwt令牌?)但我不明白在《邮差》里怎么做?解码jwt需要什么url?需要什么标题、授权?

  • 正如这里提到的http://projects.spring.io/spring-security-oauth/docs/oauth2.html,撤销是通过刷新令牌完成的。但这似乎不起作用。

  • 我不明白这个图书馆是如何工作的。你能帮帮我吗? 以下是我的简单代码: 这是错误: 字符串需要采用紧凑的JSON格式,格式为:Base64UrlEncodedHeader。Base64UrlEndcodedPayload。可选,Base64UrlEncodedSignature'。 如果你复制流在jwt.io网站,它的作品罚款:)

  • 我添加了Firebase,允许客户端直接从web应用程序客户端(浏览器)进行身份验证。我正在使用firebase web JS包,它工作得非常好。我可以在浏览器中看到,我收到一个用户对象,其中包含有关该用户的信息,包括。 然后,我需要在我的服务器后端(即python django)上对该用户进行身份验证。在Firebase文档中,我找到了一个我正试图做的操作指南,即验证id令牌。 因为他们没有支持

  • 我尝试用angular2前端实现jwt令牌。当我尝试使用Postman接收带有post方法的令牌时,我接收到授权令牌,但在Angular中这样做返回空响应对象。这里是我使用的Angular服务的代码片段。 问题是,当我尝试记录时,令牌是空的,与响应相同。对于代码的后端部分,我遵循了jwt令牌的这个实现。

  • 我将JWT的令牌发送在头中,但客户端需要它在响应的正文中,我如何将它放入响应中: