JWT Akka HTTP

This is a scala library for akka-http that indroduces a directive to make JWT authentication easier.
Usage
Add the following to build.sbt:
libraryDependencies += "com.emarsys" %% "jwt-akka-http" % "x.y.z"The latest released version is on the maven badge at the top of this document.
If you need some functionality that is not released yet, you can depend on the snapshot release. Every push to master will be released as a snapshot, you can find the exact version in the build output under the Release stage.
To depend on a snapshot, include the following in your build.sbt
resolvers += Resolver.sonatypeRepo("snapshots")In your code import and mixin the com.emarsys.authentication.jwt.JwtAuthentication trait and override its jwtConfig member with a valid configuration.
A JwtConfig can be created using a com.typesafe.config.Config which contains the configuration keys:
expirationTime: Duration
secret: StringThis can be achieved with a section like this in the application.config file:
expiration-time: 3 minutes
secret: "shhh, this is a secret!"
Examples
Returning a new token containing any custom data defined as a case class:
(get & path("handshake")) {
val customTokenData = CustomTokenData(customerId, name)
complete(generateToken(customTokenData))
}Authenticating a token received from the client:
(get & path("customers")) {
jwtAuthenticate(as[CustomTokenData]) { _ =>
complete(StatusCodes.OK)
}
}Authenticating a token and the custom contents:
(get & path("customers" / IntNumber)) { requestedCustomerId =>
jwtAuthenticate(as[CustomTokenData]) { customTokenData =>
if (customTokenData.customerId == requestedCustomerId) {
complete(StatusCodes.OK)
}
}
}License
See the attached LICENSE file.