次の方法で共有


Azure DevOps OAuth 2.0 を使用する

Azure DevOps Services

重要

Azure DevOps OAuth は非推奨となり、2026 年に削除される予定です。 このドキュメントは、既存の Azure DevOps OAuth アプリのみを対象としています。 2025 年 4 月の時点で、新しいアプリの登録は受け付けなくなりました。

新しいアプリケーションの場合: Microsoft Entra ID OAuth を使用して Azure DevOps と統合します。

既存のアプリの場合: 2026 年までに Microsoft Entra ID OAuth への移行 を計画します。

この廃止について詳しくは、こちらをご覧ください

この記事では、Azure DevOps OAuth 2.0 が既存のアプリケーションでどのように機能するかについて説明し、アプリの保守と移行に関するガイダンスを提供します。

概要

Azure DevOps OAuth 2.0 を使用すると、アプリケーションはユーザーに代わって Azure DevOps リソースにアクセスできます。 このサービスは非推奨ですが、既存のアプリケーションは 2026 年まで機能し続けます。

移行に関する推奨事項: Microsoft Entra ID OAuth への移行の計画を開始して、継続的なサービスと強化されたセキュリティ機能へのアクセスを確保します。

[前提条件]

Azure DevOps OAuth アプリケーションを使用する前に、

要件 説明
既存のアプリの登録 既存の Azure DevOps OAuth アプリ (新しい登録は 2025 年 4 月に停止しました)
Azure DevOps 組織 Azure DevOps Services 組織へのアクセス
HTTPS コールバック URL アプリケーションのセキュリティで保護されたコールバック URL
移行計画 2026 より前の Microsoft Entra ID OAuth への移行戦略

既存の Azure DevOps OAuth アプリの操作

1. 既存のアプリ登録を管理する

新しいアプリの登録は受け付けなくなりました。 このセクションは、既存の登録済みアプリケーションにのみ適用されます。

既存のアプリケーションの場合は、アプリ設定を表示および管理できます。

  1. Visual Studio プロファイルに移動して、アプリの登録にアクセスします。

  2. 構成したスコープを確認し、アプリケーションのニーズに合っていることを確認します。

  3. コールバック URL の構成を確認し、必要に応じて更新します。

    既存のアプリのアプリケーション設定を示すスクリーンショット。

  4. 2026 の廃止期限の前に、Microsoft Entra ID OAuth への移行タイムラインを計画します。

2. アプリを承認する

承認フローは、既存の Azure DevOps OAuth アプリでも変わりません。

  1. アプリ パラメーターを使用して、ユーザーを承認 URL に誘導します。

    https://app.vssps.visualstudio.com/oauth2/authorize
            ?client_id={app ID}
            &response_type=Assertion
            &state={state}
            &scope={scope}
            &redirect_uri={callback URL}
    
    パラメーター タイプ 説明
    client_id GUID 登録時にアプリに割り当てられた ID
    response_type 文字列 Assertion である必要があります。
    state 文字列 コールバックとその承認要求を関連付ける生成された文字列値
    scope 文字列 アプリに登録されているスペース区切りのスコープ。 使用可能なスコープを確認する
    redirect_uri URL アプリのコールバック URL。 アプリに登録されている URL と完全に一致する必要があります

    承認 URL の例:

    https://app.vssps.visualstudio.com/oauth2/authorize
            ?client_id=00001111-aaaa-2222-bbbb-3333cccc4444
            &response_type=Assertion
            &state=User1
            &scope=vso.work%20vso.code_write
            &redirect_uri=https://fabrikam.azurewebsites.net/myapp/oauth-callback
    

    ユーザーの承認後、Azure DevOps は認証コードを使用してコールバック URL にリダイレクトします。

    https://fabrikam.azurewebsites.net/myapp/oauth-callback
            ?code={authorization code}
            &state=User1
    

3. アクセス トークンの Exchange 承認コード

承認コードを使用して、アクセス トークンと更新トークンを要求します。

要求の詳細

URL

POST https://app.vssps.visualstudio.com/oauth2/token

ヘッダー

Content-Type: application/x-www-form-urlencoded

リクエスト本文

client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion={1}&redirect_uri={2}

パラメーターの置換:

  • {0}: アプリ登録からの URL エンコードされたクライアント シークレット
  • {1}: コールバックからの URL エンコード承認コード
  • {2}: アプリに登録されているコールバック URL

C# の実装例

public string GenerateRequestPostData(string appSecret, string authCode, string callbackUrl)
{
   return String.Format("client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion={1}&redirect_uri={2}",
               HttpUtility.UrlEncode(appSecret),
               HttpUtility.UrlEncode(authCode),
               callbackUrl
        );
}

[応答]

{
    "access_token": "{ access token for the user }",
    "token_type": "{ type of token }",
    "expires_in": "{ time in seconds that the token remains valid }",
    "refresh_token": "{ refresh token to use to acquire a new access token }"
}

重要

更新トークンを安全に格納 する - アクセス トークンはすぐに期限切れになりますが、更新トークンを使用すると、ユーザーの再認証を必要とせずに新しいアクセス トークンを取得できます。

4. アクセス トークンを使用する

アクセス トークンをベアラー トークンとして API 要求に含めます。

承認ヘッダーの形式:

Authorization: Bearer {access_token}

API 要求の例:

GET https://dev.azure.com/myaccount/myproject/_apis/build-release/builds?api-version=3.0
Authorization: Bearer {access_token}

5. 期限切れのアクセス トークンを更新する

アクセス トークンの有効期限が切れた場合は、更新トークンを使用して新しいアクセス トークンを取得します。

要求:

POST https://app.vssps.visualstudio.com/oauth2/token
Content-Type: application/x-www-form-urlencoded
Content-Length: 1654

client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=refresh_token&assertion={1}&redirect_uri={2}

パラメーターの置換:

  • {0}: URL でエンコードされたクライアント シークレット
  • {1}: URL エンコードされた更新トークン
  • {2}: アプリに登録されているコールバック URL

応答:

{
    "access_token": "{ new access token }",
    "token_type": "{ type of token }",
    "expires_in": "{ time in seconds that the token remains valid }",
    "refresh_token": "{ new refresh token }"
}

重要

更新トークンを更新する - 更新ごとに新しい更新トークンが発行されます。 新しいトークンを格納し、将来の更新操作に使用します。

コード サンプル

実際の例は、 Azure DevOps 認証サンプル リポジトリにあります。

アプリ シークレットの管理

重要

シークレットローテーションはセキュリティにとって重要です。 アプリケーション シークレットは 60 日ごとに期限切れになり、アクセスを維持するにはローテーションする必要があります。

Azure DevOps OAuth アプリでは、ダウンタイムゼロのローテーションを可能にするデュアル シークレットがサポートされています。

シークレットの切り替え

  1. Visual Studio プロファイルまたは登録シークレット API を使用して、新しいシークレットを生成します。

    セカンダリ シークレットが生成されたアプリ ページのスクリーンショット。

  2. モーダル ダイアログでアクションを確認します。

    シークレットの再生成を確認するスクリーンショット。

  3. 古いシークレットの有効期限が切れる前に、新しいシークレットを使用するようにアプリケーションを更新します。

  4. 古いシークレットの有効期限が切れる前に、新しいシークレットを十分にテストします。

  5. 新しいシークレットが有効期限に近づいたら、このプロセスを繰り返します。

緊急シークレットの失効

シークレットが侵害された場合:

  1. プロファイル内のシークレットを直ちに再生成します。
  2. 新しいシークレットでアプリケーションを更新します
  3. アプリケーション ログ内の未承認のアクセスを監視します。

Warnung

シークレットを再生成すると、以前のシークレットとそのシークレットで作成されたすべてのトークンが直ちに無効になります。

アプリを削除する

Warnung

アプリ登録を削除すると、それを使用しているすべてのアプリケーションが直ちに中断され、関連付けられているすべてのトークンが無効になります。

Azure DevOps OAuth アプリを削除するには:

  1. Visual Studio プロファイルに移動します。

  2. ドロップダウン メニューから適切なテナントを選択します。

  3. [アプリケーションとサービス] でアプリを見つけます。

  4. アプリケーション登録ページで [ 削除] を選択します

    [削除] ボタンが強調表示されているアプリ メタデータ ページのスクリーンショット

  5. モーダル ダイアログで削除を確認します。

削除後、アプリとそのすべてのトークンはすぐに動作を停止します。

移行の計画

重要

今すぐ移行の計画を開始します。 Azure DevOps OAuth は、2026 年に削除される予定です。

移行チェックリスト

  • [ ] Microsoft Entra ID OAuth のドキュメントを確認する
  • [ ] 組織内 で Azure DevOps OAuth を使用してすべてのアプリを識別 する
  • [ ] 適切なテスト時間を許可する 移行タイムラインを計画 する
  • [ ] Microsoft Entra ID OAuth をサポートするように アプリケーション アーキテクチャを更新 する
  • [ ] 非運用環境での 移行をテスト する
  • [ ] 変更をユーザーと利害関係者に伝える
  • [ ] 2026 年の期限前に 移行を完了 する

移行の利点

強化されたセキュリティ機能:

  • 多要素認証のサポート
  • 条件付きアクセス ポリシー
  • 高度な脅威保護
  • エンタープライズ ID の統合

開発者エクスペリエンスの向上:

  • 先進認証ライブラリ (MSAL)
  • Microsoft サービス全体で一貫性のある ID プラットフォーム
  • トークンの管理とキャッシュの向上

長期的なサポート:

  • 継続的な投資と機能開発
  • エンタープライズ コンプライアンスとガバナンス機能

よく寄せられる質問

Q: 新しい Azure DevOps OAuth アプリを作成することはできますか?

A:いいえ。 新しいアプリの登録は 2025 年 4 月に停止しました。 新しいアプリケーションには Microsoft Entra ID OAuth を使用します。

Q: 既存の Azure DevOps OAuth アプリはいつ動作を停止しますか?

A: Azure DevOps OAuth が 2026 年に完全に非推奨になるまで、既存のアプリは引き続き機能します。 この期限の前に移行を計画します。

Q: モバイル アプリケーションで OAuth を使用できますか?

A: Azure DevOps OAuth は Web サーバー フローのみをサポートし、クライアント シークレットのセキュリティで保護されたストレージを必要とするため、モバイル アプリには適していません。 Microsoft Entra ID OAuth は、より優れたモバイル アプリのサポートを提供します。

Q: トークンを要求するときに HTTP 400 エラーが発生した場合はどうすればよいですか?

A: 一般的な原因は次のとおりです。

  • Content-Type ヘッダーが正しくありません (application/x-www-form-urlencodedする必要があります)
  • 要求本文パラメーターの形式が正しくありません
  • 無効または期限切れの承認コード
  • コールバック URL の不一致

Q: OAuth トークンでは HTTP 401 エラーが発生するが、AT では発生しないのはなぜですか。

A: 組織の管理者が OAuth 経由のサード パーティ製アプリケーション アクセス を無効にしたかどうかを確認します。 https://dev.azure.com/{your-org-name}/_settings/organizationPolicy

無効にすると、OAuth 承認フローは機能しますが、API 呼び出しは返されます TF400813: The user "<GUID>" is not authorized to access this resource.

Q: テストに localhost を使用できますか?

A:はい、できます。 Azure DevOps OAuth では、ローカル開発とテスト用の https://localhost コールバック URL がサポートされています。

Q: 承認拒否と失効はどのように処理しますか?

A: 次の場合に適切なエラー処理を実装します。

  • 承認拒否: コールバックで承認コードが返されない
  • 承認の取り消し: API 呼び出しは 401 エラーを返します。ユーザーからの承認の再要求

Q: Azure DevOps OAuth と Microsoft Entra ID OAuth の違いは何ですか?

A:

  • Azure DevOps OAuth: 非推奨、Azure DevOps 固有の制限付きセキュリティ機能
  • Microsoft Entra ID OAuth: 最新のエンタープライズ レベルの強化されたセキュリティ、長期的なサポート

次のステップ

既存のアプリケーションの場合:

新しいアプリケーションの場合: