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

Auth0 JWT与Java

荣沈义
2023-03-14

我使用这个库Aut0JavaJWT实现了JSON Web令牌,用于使用Spring框架的REST API。

这是密码

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTCreationException;
import com.auth0.jwt.exceptions.JWTDecodeException;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.io.UnsupportedEncodingException;

public class JWTutils {
    private final static String secret = "fj32Jfv02Mq33g0f8ioDkw";

    public static String createToken(String email)
    {
        try {
            return JWT.create()
                    .withIssuer("auth0")
                    .withClaim("email", email)
                    .sign(Algorithm.HMAC256(secret));
        } catch (JWTCreationException exception){
            throw new RuntimeException("You need to enable Algorithm.HMAC256");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e.getMessage());
        }
    }

    public static String getEmailInToken(String token)
    {
        try {
            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(secret))
                    .withIssuer("auth0")
                    .build();
            DecodedJWT jwt = verifier.verify(token);
            return jwt.getClaim("email").asString();
        } catch (JWTDecodeException exception){
            return null;
        } catch (UnsupportedEncodingException e) {
            return null;
        }
    }
}

只要我使用HTTPS,我的JWT安全吗?我应该使用有效期吗?

共有1个答案

陆沈浪
2023-03-14

JWT是在客户端的计算机中放入加密的东西(比如cookie),然后它就是api的票据。(我们通常在OAuth中使用jwt)

您可以确保客户端计算机中的数据没有被修改。那么它是小型分布式会话管理的绝佳选择。

我应该使用有效期吗?

是的,特别是对于会话管理。您不希望一个用户永远登录,也许另一个用户能够窃取他的会话。这个令牌现在是他的用户名

安全吗?!

安全是有限制的,一个重要的限制是时间。每一个密码都是可破解的,但在它的时间里。你最好偶尔改变一下你的秘密。

虽然你的代码看起来很安全,但黑客还可以在许多其他情况下侵入你的系统并获取你的秘密。你也应该意识到这一点。代码的所有部分,包括系统,都必须具有可接受的安全级别。记得:

链条的强度取决于它最薄弱的一环

 类似资料:
  • 问题内容: 我觉得Java EE 6规范有点混乱。有几组注释。 我们有和一样的注释用于创建EJB。 还有一个用于创建托管的。 在和中有注释。 软件包中还有和注解。 为了使事情变得更复杂,有一个带有注释的程序包。 有人可以描述他们之间的关系吗? 我在哪里可以使用,或者注入其他bean? 问题答案: 首先让我做一些澄清: Managed bean definition:通常,托管bean是一个对象,其

  • 问题内容: Java即将接近第7版。在我看来,必须有大量的教科书和培训手册在其中,它们教授基于旧版Java的方法,而现在所教的方法将具有更好的解决方案。 有哪些样板代码情况,特别是您看到人们通过习惯的力量实现的情况,您发现自己可以重构以利用最新版本的Java? 问题答案: 枚举。更换 与

  • 问题内容: 我刚刚了解了Java的Scanner类,现在我想知道它如何与StringTokenizer和String.Split进行比较/竞争。我知道StringTokenizer和String.Split仅适用于字符串,那么为什么要对字符串使用扫描器?扫描仪是否仅打算一站式进行拆分? 问题答案: 他们本质上是课程的马。 设计用于需要解析字符串,提取不同类型数据的情况。它非常灵活,但是可以说它并没

  • 问题内容: .class文件和.java文件有什么区别?我正在尝试使我的applet正常工作,但是目前我只能在Eclipse中运行它,尚不能嵌入HTML。谢谢 **编辑:那么如何使用JVM进行编译? 问题答案: .class文件是已编译的.java文件。 .java是所有文本,并且易于阅读。 .class是二进制文件(通常)。 通过转到命令行,导航到.java文件并运行,可以将Java文件编译为类

  • 问题内容: 让clazz一些Class和obj一些Object。 是 总是和 ? 如果没有,有什么区别? 问题答案: 只要该对象表示的类是的超类或超接口,它就为。 只要对象是类的实例,它将为。 那是: 只要并且为非,就始终为真。

  • 问题内容: 这个问题最好用一个例子来解释: 在Java中,对于JPA EntityManager,我可以执行以下操作(帐户是我的Entity类): 在Scala中,我的幼稚尝试是: 但是,当我尝试在Scala中使用时,似乎并不喜欢这样。如何在Scala中为Account类指定java.lang.Class对象? 问题答案: 根据“ Scala类型系统 ”, 该方法返回Scala类型的运行时表示形式

  • 问题内容: 以下两个声明有什么区别? 是否可以将第一条语句视为静态方法的声明,而将第二条语句视为实例方法的声明,可以吗? 问题答案: 是的,第一个函数与该构造函数的对象实例没有关系,您可以将其视为 “静态方法” 。 在JavaScript中,函数是一对象,这意味着您可以像对待任何对象一样对待它们,在这种情况下,您只需向 函数object 添加属性。 第二个函数,当您扩展构造函数的原型时,将对使用该

  • 问题内容: 我不明白注释和之间的实际区别是什么? 是扩展名还是它们具有完全不同的含义?什么时候应该使用它们?春天在业务层和 使用javax 在DAO? 谢谢回答。 问题答案: 几年前,Spring定义了自己的Transactional注释以使Spring bean方法具有事务性。 Java EE 7终于做了同样的事情,现在除了EJB方法之外,还允许CDI bean方法是事务性的。因此,从Java