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




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

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


冒険心をくすぐるFocalboard:自社運用型プロジェクト管理ツールの魅力

まるで、あなたのチームを救う「秘宝の地図」のような存在になるかもしれませんよ。Focalboard は、一言で言えば「自分だけの秘密基地」で作れる、高機能なプロジェクト管理ツールです。TrelloやNotion、Asanaのようなツールのオープンソース版で、自分たちのサーバーに設置して使うことができます。つまり、データの保管場所も、機能の拡張も、すべて自分たちの手の中にあるんです。まるで、自分たちだけの特別なギルドハウスを築き上げるような感覚ですね!


Go言語エンジニアのためのWhatsApp連携術:whatsmeow徹底解説

whatsmeow は、Go言語(Golang)で書かれた、WhatsApp Web のマルチデバイス API を扱うためのライブラリです。「マルチデバイス API」というのがポイントで、スマートフォンがオフラインでも機能する、新しいWhatsAppの仕組みに対応しています。つまり、これを使えば、プログラムからWhatsAppのメッセージを送受信したり、アカウント情報を管理したりといった操作が可能になります。


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

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


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

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


牛丼一筋の心意気で学ぶ、Go言語とgRPCによる高速RPC通信

一言でいうと、「Go言語でサクッとマイクロサービスを構築するための、うまい、早い、安いRPCフレームワーク」です。RPC(Remote Procedure Call)とは、ネットワーク越しに別々のプログラムの関数を呼び出す仕組みのこと。簡単に言えば、サーバーの機能(関数)を、クライアントからまるで自分のプログラム内の関数のように呼び出せるようにしてくれる技術です。


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

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


エンタープライズRAG基盤 WeKnora:Go言語で構築する、高速・高信頼なLLM知識検索フレームワークの解剖

今回は、中国の巨大テック企業Tencentが公開している、文書理解・検索・質問応答のためのLLM(大規模言語モデル)活用フレームワーク「Tencent/WeKnora」について見ていきましょう。「え、また新しいLLMフレームワーク?もうお腹いっぱいだよ


【爆速】autobrr/qui で実現する、qBittorrent 複数管理の極上体験

autobrr/qui を一言で表すなら、まさに「職人が注いだ、雑味のない生ビール」のようなツールです。余計なものを削ぎ落とし、必要な機能だけを最高速で提供してくれます。エンジニア的な視点で見ると、このツールがいかに洗練されているかが分かります。


Goエンジニアへの道:「go-interview-practice」で実践的スキルアップ!

こんにちは!Go言語での転職やスキルアップを考えている皆さん、RezaSiさんの「go-interview-practice」という素晴らしいプロジェクトをご存知ですか?これは、Go言語を使ったコーディング面接の練習問題集なんです。まるでビールを飲み比べながら味の違いを楽しむように、様々なコーディング問題を解いて、あなたのGoスキルを磨き上げることができます。