Auth0 解耦客户端/服务器端

Auth0 decoupled client-side / server-side

我正在开发一个应用程序,它有一个使用 Play Framework Scala 的服务器端和一个客户端 AngularJS。

我只想在服务器端管理身份验证,因为我必须同时保护 API 和应用程序本身,并且我想在我的服务器上保留会话 "centralized"。

但由于我没有使用 Play Framework 视图模板(以保持我的客户端和服务器端独立),我无法像示例中那样将用户配置文件信息传递给客户端。

我试图在我的 Angular 模板上列出我的缓存和我的 Cookie 键,但我似乎在那里找不到任何东西。

有什么方法可以使用 Angular 获取会话信息?让 Play Framework 请求和管理会话? (我在文档的任何地方都找不到它)

以下是我如何呈现 Angular 客户端首页(Play 框架仅执行 API 路由和此首页路由)

  def frontPage() = AuthenticatedAction {
    request =>
      val idToken = request.session.get("idToken").get
      val profile = cache.get[JsValue](idToken + "profile").get
      Ok.sendFile(content = new File("./public/layout.html"), inline = true).as("text/html")
  }

这是在文档示例中是如何完成的:

def index = AuthenticatedAction { request =>
  val idToken = request.session.get("idToken").get
  val profile = Cache.getAs[JsValue](idToken + "profile").get
  Ok(views.html.user(profile))
}

我需要将 "profile" 应用到我的模板中,但我不想使用 scala html 模板:我想继续使用纯 Angular 模板来保持我的客户端/服务器端独立(仅通过 API)

进行通信

编辑 21/06/2016:我没有找到直接从 Angular 获取我的会话信息的方法,但我能够 return 通过扩展我的 API我更喜欢那个解决方案!见

您可以通过以下方式将其呈现给客户端:

Ok
  .sendFile(content = new File("./public/layout.html"), inline = true).as("text/html")
  .withSession(session)

.withCookies(cookie)

所以,感谢@Simon 为我指明了正确的方向。

我现在在登录后发送会话:

  Ok.sendFile(content = new File("./public/layout.html"), inline = true).as("text/html").withSession("connected" -> profile.toString())

我无法直接从 Angular 获取会话,所以我改为更新 API 以执行返回会话信息的操作:

  def getSession = Action { request =>
    request.session.get("connected").map {
      user => Ok(Json.parse(user))
    }.getOrElse {
      Unauthorized("Oops, you are not connected")
    }
  }

(在路线中:

## USER SESSION
GET        /api/session                      controllers.Callback.getSession

)

这样我就可以调用 API 在我的客户端获取我的会话信息,可能是 Angular、移动应用程序或读取 JSON 的任何类型的应用程序.

返回的 JSON 示例:

{"email":"XXX@XXX.com","email_verified":false,"clientID":"MvM2wHRX2rMKp5s3UXXXXXXXX","updated_at":"2016-06-21T10:59:49.730Z","picture":"https://s.gravatar.com/avatar/e91d5ae3XXXXXXXXXXX?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fda.png","user_id":"auth0|5XXXXXXXXX47b1b07d","name":"XXX@XXX.com","nickname":"XXX","identities":[{"user_id":"5767bea338XXXXXX","provider":"auth0","connection":"Username-Password-Authentication","isSocial":false}],"created_at":"2016-06-20T10:00:03.921Z","sub":"auth0|5767beXXXXXXX"}

我希望它能帮助任何试图从客户端解耦 Play Framework 服务器端的人!