スキップしてメイン コンテンツに移動

Gin初心者向けCORS設定

Gin初心者向けCORS設定

CORSとは何か

Webブラウザは同一オリジンポリシー(Same-Origin Policy)により、異なるドメインからのリソース取得を制限します。これを緩和する仕組みがクロスオリジンリソース共有(CORS)です。CORS設定を行うことで、API公開時に外部ドメインから安全にアクセスできるようになります。

Gin初心者にとっては、CORS設定は最初のハードルの一つです。正しく設定しないと、フロントエンドからのリクエストがブロックされ、開発が進まないケースが多いです。

gin-contrib/corsで設定する方法

Ginフレームワークでは、gin-contrib/corsというミドルウェアが公式に提供されています。これを使うと、簡単にCORS設定を行えます。

import (
    "github.com/gin-gonic/gin"
    "github.com/gin-contrib/cors"
    "time"
)

func main() {
    r := gin.Default()

    config := cors.Config{
        AllowOrigins:     []string{"https://example.com", "https://sub.example.com"},
        AllowMethods:     []string{"GET", "POST", "PUT", "DELETE"},
        AllowHeaders:     []string{"Origin", "Content-Type", "Accept"},
        ExposeHeaders:    []string{"Content-Length"},
        AllowCredentials: true,
        MaxAge: 12 * time.Hour,
    }

    r.Use(cors.New(config))

    // ルート定義
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{"message": "pong"})
    })

    r.Run(":8080")
}

上記コードでは、AllowOriginsで許可するオリジンを、AllowMethodsで許可するHTTPメソッドを指定しています。これらは必須項目で、設定ミスがあるとブラウザからのリクエストが拒否されます。

また、AllowHeadersで許可するヘッダーを明示することで、クライアント側が送るカスタムヘッダーを許可できます。ExposeHeadersはレスポンスヘッダーをクライアントに公開する際に使用します。

API公開時のセキュリティ対策

CORS設定はセキュリティの一環です。AllowOriginsにワイルドカード(*)を設定すると、全てのオリジンからのアクセスを許可してしまい、情報漏洩のリスクが高まります。実際にAPI公開する際は、信頼できるドメインのみを列挙するようにしましょう。

さらに、AllowCredentialstrueにすると、クッキーや認証情報を含むリクエストが許可されます。これを有効にする場合は、AllowOriginsにワイルドカードを使わず、明示的にオリジンを指定する必要があります。

ヘッダーに関しては、Access-Control-Allow-OriginAccess-Control-Allow-MethodsAccess-Control-Allow-Headersなどが自動で設定されますが、必要に応じて追加ヘッダーを設定することも可能です。例えば、Access-Control-Expose-Headersでクライアントに公開したいヘッダーを指定できます。

最後に、CORS設定は開発環境と本番環境で分けて管理することが推奨されます。開発時はワイルドカードを使っても構いませんが、本番では必ず制限を設けるようにしましょう。

この記事はAIによって作成されました。

コメント