实施安全的原生 Play Framework 2.3.x(Java 样式)身份验证

Implementing secure native Play Framework 2.3.x (Java style) authentication

首先,我完全了解可用于 Play 的身份验证模块。也就是说,当 Play Framework 更新到版本 2.3.x.

时,我什至无法实现 SecureSocial. With a little bit of research it became clear that a lot of things were broken in their example code provided here 中最简单的示例代码

借助在线文档和 Philip Johnson 关于实施标准(不安全)身份验证的出色 video tutorial,我成功实施了以下内容:

// Class which is used by the @Security annotation
public class Secured extends Security.Authenticator {

    @Override
    public String getUsername(Context ctx) {
        return ctx.session().get("auth");
    }

    @Override
    public Result onUnauthorized(Context ctx) {
        return  redirect(routes.Application.login());
    }
}


// Controller class that serves routes
public class Application extends Controller {

    @Security.Authenticated(Secured.class)
    public static Result index() {
        return ok(index.render("Your new application is ready."));
    }

    public static Result login() {
        session().clear();
        session("auth", "a1234");   // dummy data simulating succesful login
        returning redirect(routes.Application.index());
    }
}

我最终需要实现一个安全的登录系统来验证用户。

我的问题是两方面的。以下哪个更好:'reinventing the wheel'(至少部分地)采用工作代码库并对其进行改进,或者再次实施其中一个身份验证模块?

我们都不喜欢重新发明轮子,也就是说,我自己编译成功的机会似乎更大...

我知道,对于全面的安全性(a.k.a。分层安全),还需要安全连接实现(HTTPSTLS1.2` 在写作时间)。这超出了我的问题范围。

不知道这个问题有没有正确答案。是构建自己的框架还是尝试现有框架(可能无法完美运行)取决于您自己的判断。就个人而言,我可能会使用 SecureSocial 作为起点,但如果我无法让它工作,然后编写我自己的代码。听起来这是您已经尝试过的方法。

要使用 SecureSocial,您可能需要检查主分支并从源代码构建。如果示例已过时,可能很难使用,但再次编写自己的授权码也很困难。