NginxとGoで作る、お手軽ログイン機能


NginxとGoで作る、お手軽ログイン機能

steveiliop56/tinyauth

2025-08-10

一言で言うと、Webアプリケーションに手軽にログイン画面を追加するためのツールです。

通常、Webアプリをパスワードで保護しようとすると、ユーザー管理やセッション管理など、色々な処理を自分で実装する必要があります。これは結構な手間ですし、セキュリティを考慮すると慎重な設計が求められます。

tinyauthは、そうした面倒な部分を肩代わりしてくれます。NginxとGo言語のミドルウェアを使うことで、既存のアプリの前にログイン機能を挟み込み、特定のユーザーだけがアクセスできるようにしてくれるんです。

実装の手間が大幅に削減できる
ユーザー認証のロジックをゼロから書く必要がありません。

既存アプリに影響を与えない
アプリケーション本体には一切手を加えることなく、ログイン機能を追加できます。これは、特にレガシーなシステムや、認証機能を組み込むのが難しいアプリにとって非常に強力なメリットです。

シンプルな構成
NginxとGo言語で構成されているため、理解しやすく、管理も簡単です。

導入は大きく分けて2つのステップになります。

Nginxのリバースプロキシ機能を使います。tinyauthが認証を担当し、認証が通ったリクエストだけをあなたのアプリケーションに転送するように設定します。

server {
    listen 80;
    server_name your-app.com;

    location / {
        # tinyauthの認証にリクエストを渡す
        auth_request /auth;

        # 認証が失敗した場合のエラーページ
        error_page 401 = @401_error;

        proxy_pass http://your-application-server;
    }

    location = /auth {
        # tinyauthサーバーへのリクエスト
        proxy_pass http://tinyauth-server;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Original-URI $request_uri;
    }

    # 401エラーページの設定
    location @401_error {
        return 302 /login;
    }

    location /login {
        # ログインページの表示
        proxy_pass http://tinyauth-server;
    }
}

この設定では、your-app.comへのリクエストがまず/authに送られ、そこで認証が行われます。認証が通ればproxy_passで指定したアプリケーションサーバーに転送されます。もし認証に失敗(401 Unauthorized)したら、ログインページにリダイレクトされる、という流れです。

tinyauthを動かすためのGoのコードを用意します。これは認証情報を定義するシンプルなサーバーになります。

package main

import (
    "net/http"
    "github.com/steveiliop56/tinyauth"
)

func main() {
    // 認証情報(ユーザー名とパスワード)を定義
    users := map[string]string{
        "admin": "password123", // 本番環境ではもっと強力なパスワードを使いましょう!
    }

    // tinyauthのミドルウェアを作成
    auth := tinyauth.New(
        tinyauth.WithUsers(users),
        tinyauth.WithLoginPage("/login"),
    )

    // HTTPサーバーを起動
    http.Handle("/", auth(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // ここには認証後の処理を書くことができますが、今回は何もしません。
        // Nginxがtinyauthの結果を見て、リクエストを転送します。
    })))

    http.ListenAndServe(":8080", nil)
}

このコードでは、adminというユーザー名とpassword123というパスワードを定義しています。tinyauth.New()でミドルウェアを生成し、それをHTTPサーバーに組み込むだけです。

これで、あなたのアプリケーションを認証機能付きで公開する準備が整いました。

tinyauthは、NginxとGo言語の組み合わせで、アプリケーションにログイン機能を素早く、そして安全に組み込むための素晴らしいツールです。特に、既存のアプリケーションに手を加えずに認証機能を追加したい場合に、その真価を発揮します。


steveiliop56/tinyauth




GoとReactが火を吹くぜ!次世代AIペネトレーションテスト「Pentagi」導入ガイド

いいかい、こいつはただの自動化ツールじゃねぇ。「AIのエージェント」が自分で考えて、ハッキング(ペネトレーションテスト)を完結させちまうっていう、とんでもねぇシロモノだ。「すっとこどっこい!人間がポチポチやってる間に、仕事が終わっちまうぞ!」ってな。それじゃ、いってみよう!


GOWA参上!WhatsApp自動化で開発効率を爆上げだ!

悪の組織に立ち向かう戦隊ヒーローのように、私たちソフトウェアエンジニアも日夜、様々な課題と戦っています。その中でも「WhatsAppの自動化」は、多くの人が直面する難題の一つでした。しかし、GOWAという強力な味方が現れました!GOWAは、Go言語で開発されたWhatsApp REST APIです。簡単に言うと、あなたのプログラムからWhatsAppを操作できるようにするツールですね。これまでのWhatsApp自動化は、ブラウザを操作したり、非公式なライブラリを使ったりと、不安定なものが多かったんです。でもGOWAは、公式のWhatsApp Webマルチデバイス機能に対応しているので、安定性が格段に向上しました!


「太陽光でタダ充電」を叶えるEVCCの仕組み:ソフトウェアエンジニアが解説する設定と互換性

ここでご紹介する evcc-io/evcc は、まさにその悩みを解決してくれる、ソフトウェアエンジニアから見て「これは使える!」と思える素晴らしいオープンソースプロジェクトです。evcc("Electric Vehicle Charge Controller"の略)は、電気自動車(EV)の充電を賢くコントロールするためのエネルギー管理システムです。


【ゼロトラスト入門】NetBird×WireGuardで作る、鉄壁のプライベートネットワーク構築術

今日は、我々のパトロールエリア(ネットワーク)の安全を劇的に高め、かつ署員同士の通信を円滑にする強力な装備、「NetBird」について訓示を行う。最近のネットワーク境界は、昔のような「高い塀を作れば安心」という時代ではない。現場の署員(デバイス)がどこにいても、まるで同じ署内にいるかのように安全に繋がる必要がある。


Go言語でCLIを楽しく!Bubble Tea入門

やぁ、ソフトウェアエンジニアの皆さん!今日は、Go言語を使ったCLI開発を劇的に楽しくしてくれるフレームワーク「Bubble Tea」について、飲み比べコント風にご紹介しますね。このお酒、見た目は素朴な「ターミナル画面」なんだけど、一口飲むと「わ、これすごい!」ってなるんですよ。


Dockerだけじゃない!Moby Projectで自作コンテナ環境を構築する

Moby Project ってのはな、一言で言うと「コンテナをベースにしたシステムを作るための、オープンソースのツールキット」だ。例えるなら、俺たちが事件現場で使う道具一式、例えば手錠とか懐中電灯とか、そういうのを全部まとめて提供してくれるようなもんだな。


妹が教える!エンジニアのためのOllama活用術

ねえねえ、最近流行りの「Ollama」って知ってる?お兄ちゃんの好きそうな、めちゃくちゃ便利なツールなんだよ!Ollamaはね、お兄ちゃんのパソコンで、いろんなAIモデルを簡単に動かせるようにしてくれるすごーいツールなんだ!今までだと、AIモデルを使おうと思ったら、いろいろ難しそうな設定をしなきゃいけなかったり、パソコンの性能が足りなかったりしたんだけど、Ollamaを使えば、そんな心配はほとんどいらなくなるんだって!


【脱Electron】Go製TUIクライアント「Discordo」が開発環境を最適化する理由

Discordoは、Discordのクライアントをターミナル上(TUI Terminal User Interface)で動作させるための軽量かつセキュアなソフトウェアです。言語・環境 Go言語 (Golang) で書かれており、Linux環境での利用が想定されています。


クレーンゲーム攻略にTelegraf!?データで掴む勝利の秘訣

MC(陽気な兄ちゃん風)「さあ、みんなー!今日は特別企画!巷で噂のUFOキャッチャー、その攻略法を伝授しちゃうぜ!」アシスタント(冷静な妹風)「でも兄さん、クレーンゲームって運じゃないですか?攻略法なんてあるんですか?」MC「フフフ…甘いな妹よ!確かに運の要素はある。だが、そこにはデータが隠されているのさ!そして、そのデータを捉えるための秘密兵器が…そう、influxdata/telegrafだ!」


もう悩まない! Go言語からRedisを使うためのベストパートナー「Redis Goクライアント」

そうですね、彼女がたくさんの水着の中から、どれが一番自分に似合うか、海辺で輝けるかを悩むように、私たちソフトウェアエンジニアも、たくさんのライブラリの中から、どのツールがプロジェクトに最適か、効率的に開発できるかを悩むことがあります。今回は、その悩みを解決してくれる頼もしい相棒の一つ、Redis Go clientについて、彼女の水着選びをサポートする優しい彼氏のように、分かりやすく丁寧に解説していきますね!