Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Unconditional `prompt=consent` (when `offline_access` in scope) blocks OAuth in Entra tenants with user consent disabled + admin consent granted

オープン 初心者向け
#2,867 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
1/5
見積もり時間
1時間未満
初心者へのやさしさ
90/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
typescript

調査の方向性

packages/client/src/client/auth.ts を開いて startAuthorization を確認し、特に prompt=consent を追加する offline_access の処理を調べます。無条件の追加を削除し、offline_access の認可 URL に prompt=consent が含まれなくなったことを確認します。これにより、既存の管理者許可がある Entra テナントが同意画面なしでトークンを返せるようにします。

索引モデルが issue の本文から書いたものです。

説明

v1 v2

Symptom

packages/client/src/client/auth.ts, in startAuthorization:

if (scope?.split(' ').includes('offline_access')) {
    authorizationUrl.searchParams.append('prompt', 'consent');
}

In enterprise Entra tenants where:

  • User consent is disabled (Microsoft's recommended default)
  • Admin consent granted tenant-wide for the app (AllPrincipals OAuth2PermissionGrant present)

prompt=consent bypasses the existing admin grants and forces Entra to show the consent screen. Non-admin users hit AADSTS90095: Admin consent is required on every reconnect. Unrecoverable, since the admin already consented. Approving the resulting admin-consent request does not change tenant state; the next connect triggers another same consent request.

Verified in our tenant against a Microsoft-hosted MCP server (WorkIQ Mail Tool): manually removing &prompt=consent from the SDK-generated authorize URL and continuing the flow returns tokens immediately, no consent screen. Grants are respected; the SDK-added parameter is the sole blocker.

Repro

Cline (using this SDK): blocks with AADSTS90095:

https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize
  ?response_type=code
  &client_id=<redacted>
  &redirect_uri=http://127.0.0.1:1456/mcp/oauth/callback
  &scope=<resource>/.default+openid+profile+offline_access
  &prompt=consent   ← added by SDK, sole blocker
  &resource=<resource>

The &prompt=consent in this URL is what the SDK code shown above appends. Removing it manually (per the Symptom section above) returns tokens with no consent screen - confirming it as the sole blocker.

Fix

Drop the unconditional add.

Spec basis: OIDC Core §11's prompt=consent obligation is on the authorization server, not the client. §11 notes that prompt=consent "can be used" by the AS - not required to be sent by the client. #681 introduced the client-side add as a defensive measure; the underlying spec doesn't ask for it.

Precedent: Azure CLI, VS Code, and other established OAuth clients requesting offline_access against Entra don't force the prompt=consent parameter client-side and operate correctly in the same enterprise-tenant configuration where this SDK currently breaks.

Downstream clients that want to force re-consent for a specific high-risk flow can add the parameter themselves at the call site.

Impact

Blocks every non-admin end-user in enterprise Entra tenants for any MCP server the client OAuths against.

Related:

  • anthropics/claude-code#94804 (client-side symptom report; wrong repo for the fix)
  • #1958 (open PR; only de-dupes the parameter, still emits it every time)
  • #681 (original PR that introduced this behavior)
主要言語
TypeScript
スター
13.4k
フォーク
2.2k
平均マージ
5日 16時間
マージ済み PR(30日)
5

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

modelcontextprotocol/typescript-sdk のほかの issue

modelcontextprotocol/typescript-sdk の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。