oauth
ポートレスなローカル開発URL(例:`.localhost` サブドメイン)でGoogle・Apple・Microsoft・Facebook・GitHubなどのOAuthプロバイダーを正しく動作させるための設定を行います。「redirect_uri_mismatch」や「invalid redirect」エラーの修正、ローカル開発環境でのサインイン設定、プロバイダーがリダイレクトURIを拒否する場合などに使用してください。OAuthコールバックURLやリダイレクトURIに関するあらゆる設定トラブルに対応します。
description の原文を見る
Configure OAuth providers (Google, Apple, Microsoft, Facebook, GitHub, etc.) to work with portless local dev URLs. Use when setting up OAuth redirect URIs, fixing "redirect_uri_mismatch" or "invalid redirect" errors, configuring sign-in providers for local development, or when a provider rejects .localhost subdomains. Triggers include "OAuth not working with portless", "redirect URI mismatch", "Google/Apple/Microsoft sign-in fails locally", "configure OAuth for local dev", or any task involving OAuth callback URLs with portless domains.
SKILL.md 本文
OAuth with Portless
OAuthプロバイダーはリダイレクトURIをドメインルールに基づいて検証します。.localhostサブドメインはPublic Suffix Listに含まれていないか明示的にブロックされているため、ほとんどのプロバイダーで失敗します。Portlessは--tldを使って、アプリを実際の有効なドメイン上で提供することでこの問題を解決します。
問題点
Portlessがデフォルトの.localhost TLDを使用する場合、OAuthプロバイダーはhttp://myapp.localhost:1355/callbackのようなリダイレクトURIを拒否します:
| プロバイダー | localhost | .localhostサブドメイン | 理由 |
|---|---|---|---|
| 許可 | 拒否 | バンドルされたPSLに未記載 | |
| Apple | 拒否 | 拒否 | localhostを一切受け付けない |
| Microsoft | 許可 | 許可 | localhostの扱いが寛容 |
| 許可 | 変動する | 各URIを正確に登録する必要 | |
| GitHub | 許可 | 許可 | 寛容 |
GoogleとAppleが最も厳格です。MicrosoftとGitHubはlocalhostの扱いがより寛容です。
解決策
有効なTLDを使用して、リダイレクトURIがプロバイダーの検証に通るようにします:
portless proxy start --tld dev
portless myapp next dev
# -> https://myapp.dev
Public Suffix Listに含まれる任意のTLDが使用できます:.dev、.app、.com、.ioなど。
所有しているドメインを使う
.devのようなベアTLDはmyapp.devが実際のドメインと衝突する可能性があります。自身が管理するドメインのサブドメインを使用してください:
portless proxy start --tld dev
portless myapp.local.yourcompany next dev
# -> https://myapp.local.yourcompany.dev
これにより、所有していないサーバーへのアウトバウンドトラフィックがないことが確実になります。チームの場合は、ワイルドカードDNSレコード(*.local.yourcompany.dev -> 127.0.0.1)を設定して、すべての開発者が/etc/hosts変更なしで解決できるようにします。
プロバイダー設定
- Google Cloud Console > Credentialsに移動
- OAuth 2.0 クライアントID(Webアプリケーション)を作成または編集
- Authorized JavaScript originsにPortlessドメインを追加:
https://myapp.dev - Authorized redirect URIsにコールバックを追加:
https://myapp.dev/api/auth/callback/google
GoogleはドメインをPublic Suffix Listに基づいて検証します。ドメインは認識されたTLDで終わる必要があります。.localhostサブドメインはこのチェックに失敗しますが、.dev、.app、.comなどはすべてパスします。
.devと.appではHTTPSが必須です(HSTS事前ロード)。Portlessは--httpsで自動的に処理します。
Apple
Apple Sign InはlocalhostまたはIPアドレスをまったく許可していません。
- Apple Developer > Certificates, Identifiers & Profilesに移動
- Services IDを登録
- Sign In with Appleを設定し、PortlessドメインをReturn URLとして追加:
https://myapp.dev/api/auth/callback/apple
ドメインは実際の公開可能なドメイン名である必要があります。Portlessはドメインを127.0.0.1にローカルマップするため、ブラウザは解決しますがAppleのサーバー側検証ではドメインの公開解決を必要とする場合があります。Appleがドメインを拒否する場合は、開発サブドメイン用に127.0.0.1を指すパブリックDNS Aレコードを追加してください。
Microsoft (Entra / Azure AD)
- Azure Portal > App registrationsに移動
- アプリ登録を作成または編集
- Authenticationの下にWebリダイレクトURIを追加:
https://myapp.dev/api/auth/callback/azure-ad
Microsoftはローカルホストでのポート開発にhttp://localhostを許可しています。ほとんどの場合.localhostサブドメインも受け入れます。プロバイダー間での一貫性を保つため、PortlessでカスタムTLDを使用することは依然として推奨されます。
Facebook (Meta)
- Meta for Developers > App Dashboardに移動
- Facebook Login > Settingsの下にValid OAuth Redirect URIsにPortless URLを追加:
https://myapp.dev/api/auth/callback/facebook
FacebookはリダイレクトURIごとに正確に登録する必要があります(ワイルドカード不可)。Strict Mode(デフォルトで有効)は正確なマッチングを強制します。
GitHub
- GitHub Developer Settings > OAuth Appsに移動
- Authorization callback URLを設定:
https://myapp.dev/api/auth/callback/github
GitHubはlocalhostとサブドメインで寛容です。カスタムTLDは厳密には必須ではありませんが、セットアップの一貫性が保たれます。
認証ライブラリの設定
NextAuth / Auth.js
NEXTAUTH_URLをPortlessドメインと一致するように設定:
NEXTAUTH_URL=https://myapp.dev
NextAuthはこれを使ってコールバックURLを構築します。これがないと、コールバックがlocalhostを使用して不一致が発生する可能性があります。
Passport.js
各ストラテジーのcallbackURLをPortlessドメインを使用するように設定:
new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: process.env.BASE_URL + "/auth/google/callback",
});
環境でBASE_URL=https://myapp.devを設定します。
汎用 / 手動
Portlessが子プロセスに注入するPORTLESS_URL環境変数を読み込みます:
const baseUrl = process.env.PORTLESS_URL || "http://localhost:3000";
const callbackUrl = `${baseUrl}/auth/callback`;
トラブルシューティング
「redirect_uri_mismatch」または「invalid redirect URI」
OAuth フロー中に送信されたリダイレクトURIがプロバイダーに登録されているものと一致しません。次を確認してください:
- プロバイダーの登録済みリダイレクトURIがPortlessドメインと正確に一致している(プロトコル、ホスト、パス)
NEXTAUTH_URLまたはそれに相当するものがPortless URL(localhostではなく)に設定されている- プロキシが正しいTLDで実行されている(
portless listで確認)
プロバイダーがHTTPSを要求
.devと.app TLDはHSTS事前ロードされているため、ブラウザはHTTPSを強制します。プロキシを開始:
portless proxy start --tld dev
Portlessはデフォルトでポート443でHTTPSを使用します(sudoで自動昇格)。portless trustを実行してローカルCAをシステムトラストストアに追加し、ブラウザ警告を削除します。
Appleがドメインを拒否
Appleはドメインの公開解決を要求する場合があります。開発サブドメイン用に127.0.0.1を指すDNS Aレコードを追加:
myapp.local.yourcompany.dev A 127.0.0.1
またはワイルドカード:*.local.yourcompany.dev A 127.0.0.1。
サインイン後のコールバックが間違ったURLに移動
認証ライブラリがPortlessドメインの代わりにlocalhostからコールバックURLを構築しています。適切な環境変数を設定:
- NextAuth:
NEXTAUTH_URL=https://myapp.dev - Auth.js v5:
AUTH_URL=https://myapp.dev - 手動:
PORTLESS_URLは自動的に注入されます。ベースURLとして使用してください
例
--tld devを使用したNext.js + NextAuth + Google OAuthの完全に動作する例については、を参照してください。examples/google-oauth
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- vercel-labs
- リポジトリ
- vercel-labs/portless
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/vercel-labs/portless / ライセンス: Apache-2.0
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。