【问题标题】:How to generate JWT Token using Facebook credentials in Spring boot如何在 Spring Boot 中使用 Facebook 凭据生成 JWT 令牌
【发布时间】:2019-01-22 10:12:12
【问题描述】:

我有一个要求,必须开发 Spring Boot Rest API 以使用 Facebook 凭据登录,并且必须为此凭据生成 JWT 令牌并验证每个请求。

谢谢。

【问题讨论】:

  • 我希望您已经了解 JWT 令牌。如果不熟悉它,可以使用文档。我建议您不要将 facebook 凭据包含在 JWT 中。而不是这样做,您应该生成一个随机令牌,该令牌将存储在某种存储中,例如持久性或缓存。每次,在每个请求的授权上,您都可以从缓存或持久性中检索 facebook 凭据并验证令牌。如果您需要更多帮助或我遗漏了什么,请在 cmets 中告诉我。
  • 嗨 Nisheeth,我明白了。但我的要求是使用需要使用 Facebook 凭据登录,并且必须验证使用进一步请求。
  • 例如。如果我在 xyz App 上使用 facebook 凭据登录。接下来我试图访问一些机密信息,这个时候必须验证使用是否被授权。这是我的要求。你能帮帮我吗?谢谢。
  • 当用户使用 facebook 凭据登录时,用户将通过 facebook 的身份验证,并颁发可用于授权的令牌。我的观点是,一旦您在 facebook 上对用户进行身份验证,您就会获得凭证。与其将其包装到 JWT 中,不如将其与 id 一起存储在某处,并将该 ID 包装在 JWT 中。在每个请求上,您都会收到 JWT 令牌,并且在授权时,您可以从 JWT 获取 id 并从持久化或存储和授权用户中获取它。
  • 好的,您能否分享一下代码片段/链接,以便在 facebook 完成身份验证后获取用户凭据。

标签: java spring spring-boot


【解决方案1】:

当用户使用 facebook 凭据登录时,用户将通过 facebook 进行身份验证,并将颁发可用于授权的令牌。我的观点是,一旦您在 facebook 上对用户进行身份验证,您就会获得凭证。与其将其包装到 JWT 中,不如将其与 id 一起存储在某处,并将该 ID 包装在 JWT 中。在每个请求中,您都会收到 JWT 令牌,并且在授权时,您可以从 JWT 获取 id 并从持久化或存储和授权用户中获取它。

假设您在登录后拥有 facebook 令牌,那么您必须使用某个 id 将其存储在某个地方 String fbTokenId = storeFBToken(fbToken);。使用此令牌,您可以生成 JWT 令牌,如:

Algorithm algorithm = Algorithm.HMAC256(key);
String token = JWT.create().withIssuer(author)
            .withClaim("fbTokenId", fbTokenId)
            .withSubject("user")
            .sign(algorithm);

当您授权请求时,您将拥有 JWT 令牌。现在您必须获取验证令牌并阅读fbTokenId 来验证它:

Algorithm algorithm = Algorithm.HMAC256(key);
JWTVerifier verifier = JWT.require(algorithm).withIssuer(author)
        .build();
DecodedJWT jwt = verifier.verify(token);
String fbTokenId = jwt.getClaim("fbTokenId").as(String.class);
String fbToken = getFBTokenFromStore(fbTokenId);

在开始之前,请确保您了解无状态身份验证和授权概念,尤其是令牌。

查找示例身份验证应用程序here

【讨论】:

  • 能否请您分享参考链接在哪里可以找到完整代码
  • 你用的是什么版本的spring boot?
  • 看看我在帖子中添加的链接。
猜你喜欢
  • 2020-01-12
  • 2017-10-03
  • 2021-10-13
  • 2019-09-04
  • 2020-10-24
  • 2020-03-05
  • 1970-01-01
  • 2022-01-14
  • 2021-03-03
相关资源
最近更新 更多