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公開する際は、信頼できるドメインのみを列挙するようにしましょう。
さらに、AllowCredentialsをtrueにすると、クッキーや認証情報を含むリクエストが許可されます。これを有効にする場合は、AllowOriginsにワイルドカードを使わず、明示的にオリジンを指定する必要があります。
ヘッダーに関しては、Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headersなどが自動で設定されますが、必要に応じて追加ヘッダーを設定することも可能です。例えば、Access-Control-Expose-Headersでクライアントに公開したいヘッダーを指定できます。
最後に、CORS設定は開発環境と本番環境で分けて管理することが推奨されます。開発時はワイルドカードを使っても構いませんが、本番では必ず制限を設けるようにしましょう。
コメント
コメントを投稿