めちゃくちゃ車輪の再発明だけど、
車輪の規格が合わなくて自作しないといけないときもあるんだ…。
ログイン画面作るのがメンドクサイときにも使えるかもしれない。
マイクロフレームワークSpark Frameworkでの実装例です
まずはBasic認証についてのお勉強
ふむふむ…。
まず、httpサーバがステータス401
で
WWW-Authenticate: Basic realm=\"Secret Zone\"\r\n
とかいうヘッダーを返しておけばよさようだ
そしたら、ブラウザ側で認証情報入力したら
Authorization: Basic <'ID:PASS'のBase64形式>
っていうヘッダーがクライアントから来るから
それをデコードして一致してれば認証OKで、NGならまた401を返せばいいみたいだ
さっそく実装
使えそうなスニペットが無いか、公式ドキュメントを見てみよう。
Documentation - Spark Framework: An expressive web framework for Kotlin and Java
各リクエストの処理の前に走るフィルターで認証処理をするのが良さそうだ。
実装してみた例
before((request, response) -> {
String reqAuth = "" + request.headers("Authorization");
String basicAuth =
Base64.getEncoder().encodeToString("user1234:password1234".getBytes(StandardCharsets.UTF_8));
if (!reqAuth.replaceAll("Basic\\s", "").equals(basicAuth)) {
System.out.println("Basic Authorization is failed!");
response.header("WWW-Authenticate", "Basic realm=\"Secret Zone\"\r\n");
halt(401, "You are not welcome here");
}
});
Java8じゃないと標準のBase64ライブラリが使えないんで、
Java7の人は、↓の好きなほうを使いましょう
BaseEncoding (Guava: Google Core Libraries for Java 16.0 API)
Base64 (Apache Commons Codec 1.11 API)