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エンジニアへの道:「go-interview-practice」で実践的スキルアップ!

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


ソフトウェアエンジニア必見!Cobraで実現するプロ級Go CLIツール

「コマンドの解析が面倒だ…」 「ヘルプメッセージをいちいち書くのが大変…」 「サブコマンドをうまく管理できない…」もう大丈夫です!そんな悩みとは今日でサヨナラ。 今回は、あなたの開発を劇的にラクにする、魔法のツール「Cobra」をご紹介します!


【Go言語バックエンド】PocketBase:一杯入魂!高速開発を叶える秘密の屋台

PocketBaseは、例えるなら「一杯入魂のこだわりラーメン屋台」のような存在です。「一杯入魂」 これ一本で認証、データベース、ファイルストレージ、リアルタイム同期まで、バックエンドに必要な機能がギュッと凝縮されています。まるで、店主が一人で麺打ちからスープ作り、盛り付けまでこなすようなイメージです。


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

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


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

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


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

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


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

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


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

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


DockerとGoで実現!遠隔操作ブラウザ「ネコ」があなたの開発を変える

やあ、諸君! プロのソフトウェアエンジニアである君なら、きっと「もっと自由に、もっと安全に、ウェブの向こう側を覗き見たい」なんて考えたことがあるはずだ。まるでルパン三世がどんな厳重なセキュリティも掻い潜るようにね。今日紹介するのは、そんな君の願いを叶えるかもしれない、とびきりのツール「m1k1o/neko」、通称「ネコ」だ。


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

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