微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

KEYCLOAK VERTX 注销

如何解决KEYCLOAK VERTX 注销

我目前正在使用带有 vertx 的 keyckloak,我正在尝试从我的应用程序注销,但我无法删除令牌。当我注销时,我仍然可以访问私人页面。你能给我一些建议吗?

这是我的代码

    InputStream input = new FileInputStream("./config.properties");
    Properties prop = new Properties();
    prop.load(input);

    String resource = prop.getProperty("resource");
    String credentials = prop.getProperty("credentials");
    int listeningPort = Integer.parseInt(prop.getProperty("listeningPort"));

    OpenIDConnectAuth.discover(vertx,new OAuth2Options()
            .setFlow(OAuth2FlowType.AUTH_CODE)
            .setSite("http://10.241.0.188:8080/auth/realms/demo")
            .setTenant("demo")
            .setClientID(resource)
            .setClientSecret(credentials))
    
    .onSuccess(oauth2 -> {
        OAuth2AuthHandler test = OAuth2AuthHandler.create(vertx,oauth2)
            .setupCallback(router.get("/callback"));
        
        router.route("/private/*").handler(test);    
        
        router.route("/private*").handler(ctx -> {
            ctx.response().sendFile("/home/Documents/private_page.html");
            });   
       
        router.route("/").handler(ctx -> {
            ctx.response().sendFile(index);
            });           
        
        router.route("/webroot/*").handler(StaticHandler.create("webroot"));
        
        router.route("/logout").handler(context -> {
            Accesstoken user = (Accesstoken) context.user();
            user.logout(res -> {
              if (res.succeeded()) {
                  context.clearUser();
                  context.session().destroy();
                  context.response().putHeader("location","/").setStatusCode(302).end();
                    // the logout call succeeded
                  } else {
                    // the user might not have been logged out
                    // to kNow why:
                    System.err.println(res.cause());
                  }             
              });               
          });
        vertx.createHttpServer().requestHandler(router).listen(listeningPort);
    });   
}

}

解决方法

在 vert.x 4.x 中,安全模块得到了改进,User 对象现在是通用的,不需要为特定提供程序进行自定义类转换。

这意味着该示例正在尝试使用已弃用的代码,因此应针对新 API 对其进行更新。

此外,Vert.x 4.x 还改进了对 Oauth2 + OpenId Connect 标准的支持,现在支持官方结束会话 url,而不是像以前那样依赖非标准功能:AccessToken.logout() .

因此要执行注销,您现在只需要执行以下操作:

router.route("/logout")
  .handler(ctxt -> {
    // clear the session
    ctx.session().destroy();
    // use the oauth2/oidc end session url to signal the logout
    ctx.redirect(oauth2.endSessionURL(ctx.user()));
  });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。