繁体   English   中英

在play2剪影JWT中达到JWT令牌

[英]Reaching JWT Token in play2 silhouette JWTAuthenticator

Play-silhouette-rest激活器模板提供了一个很好的示例,说明如何使用REST身份验证/通过HeaderAuthenticator进行注册。 获取登录请求后,它将创建用户并在响应正文和标头中返回令牌

 val response = Ok(Json.toJson(Token(token = authenticator.id, expiresOn = authenticator.expirationDate)))
 env.authenticatorService.init(authenticator, Future.successful(response))

在此示例中,我在正文(在第一行中初始化)和标头(在第二行中初始化)中得到了相同的标记。

愿意使用JWTAuthenticator,我更改了代码以改为使用它(代码是相同的,唯一的区别是依赖注入代码),所以我希望外观相同。

但是使用JWTAuthenticator authenticator.id可以给我另一个生成的ID(基于稍后生成的真实JSON Web令牌),并且JSON Web Token仅写在第二行代码的标头中。

我愿意在响应正文中返回真实的json网络令牌,但在用相同的方法编写标头后,不想读取标头。

有什么解决办法吗?

我看到的唯一解决方案是使用请求而不是响应来初始化身份验证器。 这是可能的,因为身份验证器服务包含两个init方法。 第一个可以使用响应初始化身份验证器,第二个可以使用请求初始化身份验证器。

env.authenticatorService.init(authenticator, request).map { r =>
  r.headers.get("X-Auth-Token") match {
    case Some(token) => Ok(Json.toJson(Token(token = token, expiresOn = authenticator.expirationDate)))
    case None => BadRequest("Couldn't generate token")
  }
}

我将看看是否可以添加其他init方法来初始化身份验证器并返回生成的值。 您可以关注此问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM