Skip to content
Snippets Groups Projects
Commit 015811cb authored by Joel Cavat's avatar Joel Cavat
Browse files

Example with bearer tokens

parent 804e54fb
No related branches found
No related tags found
No related merge requests found
```
curl -H "Authorization: Bearer ABCD" http://localhost:8080/users
```
tokens = ["ABCD", "DEFG"]
\ No newline at end of file
...@@ -20,6 +20,9 @@ import com.example.UserRegistryActor._ ...@@ -20,6 +20,9 @@ import com.example.UserRegistryActor._
import akka.pattern.ask import akka.pattern.ask
import akka.util.Timeout import akka.util.Timeout
import com.typesafe.config.ConfigFactory
import collection.JavaConversions._
//#user-routes-class //#user-routes-class
trait UserRoutes extends JsonSupport { trait UserRoutes extends JsonSupport {
//#user-routes-class //#user-routes-class
...@@ -35,8 +38,10 @@ trait UserRoutes extends JsonSupport { ...@@ -35,8 +38,10 @@ trait UserRoutes extends JsonSupport {
// Required by the `ask` (?) method below // Required by the `ask` (?) method below
implicit lazy val timeout = Timeout(5.seconds) // usually we'd obtain the timeout from the system's configuration implicit lazy val timeout = Timeout(5.seconds) // usually we'd obtain the timeout from the system's configuration
val tokens: List[String] = ConfigFactory.load().getStringList("tokens").toList
def check(credentials: Credentials): Option[String] = credentials match { def check(credentials: Credentials): Option[String] = credentials match {
case p @ Credentials.Provided(id) if id == "john" && p.verify("p4ssw0rd") => Some(id) case p @ Credentials.Provided(token) if tokens.exists(t => p.verify(t)) => Some(token)
case _ => None case _ => None
} }
...@@ -45,7 +50,8 @@ trait UserRoutes extends JsonSupport { ...@@ -45,7 +50,8 @@ trait UserRoutes extends JsonSupport {
//#users-get-delete //#users-get-delete
lazy val userRoutes: Route = Route.seal { lazy val userRoutes: Route = Route.seal {
pathPrefix("users") { pathPrefix("users") {
authenticateBasic(realm = "secure site", check) { userName => //authenticateBasic(realm = "secure site", check) { userName =>
authenticateOAuth2(realm = "secure site", check) { token =>
concat( concat(
//#users-get-delete //#users-get-delete
pathEnd { pathEnd {
...@@ -53,7 +59,7 @@ trait UserRoutes extends JsonSupport { ...@@ -53,7 +59,7 @@ trait UserRoutes extends JsonSupport {
get { get {
val users: Future[Users] = val users: Future[Users] =
(userRegistryActor ? GetUsers).mapTo[Users] (userRegistryActor ? GetUsers).mapTo[Users]
log.info(userName + " registered") log.info(token + " registered")
complete(users) complete(users)
}, },
post { post {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment