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. 既存のアプリ登録を管理する
注
新しいアプリの登録は受け付けなくなりました。 このセクションは、既存の登録済みアプリケーションにのみ適用されます。
既存のアプリケーションの場合は、アプリ設定を表示および管理できます。
Visual Studio プロファイルに移動して、アプリの登録にアクセスします。
構成したスコープを確認し、アプリケーションのニーズに合っていることを確認します。
コールバック URL の構成を確認し、必要に応じて更新します。
2026 の廃止期限の前に、Microsoft Entra ID OAuth への移行タイムラインを計画します。
2. アプリを承認する
承認フローは、既存の Azure DevOps OAuth アプリでも変わりません。
アプリ パラメーターを使用して、ユーザーを承認 URL に誘導します。
https://app.vssps.visualstudio.com/oauth2/authorize ?client_id={app ID} &response_type=Assertion &state={state} &scope={scope} &redirect_uri={callback URL}パラメーター タイプ 説明 client_idGUID 登録時にアプリに割り当てられた ID response_type文字列 Assertionである必要があります。state文字列 コールバックとその承認要求を関連付ける生成された文字列値 scope文字列 アプリに登録されているスペース区切りのスコープ。 使用可能なスコープを確認する redirect_uriURL アプリのコールバック 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 アプリでは、ダウンタイムゼロのローテーションを可能にするデュアル シークレットがサポートされています。
シークレットの切り替え
Visual Studio プロファイルまたは登録シークレット API を使用して、新しいシークレットを生成します。
モーダル ダイアログでアクションを確認します。
古いシークレットの有効期限が切れる前に、新しいシークレットを使用するようにアプリケーションを更新します。
古いシークレットの有効期限が切れる前に、新しいシークレットを十分にテストします。
新しいシークレットが有効期限に近づいたら、このプロセスを繰り返します。
緊急シークレットの失効
シークレットが侵害された場合:
- プロファイル内のシークレットを直ちに再生成します。
- 新しいシークレットでアプリケーションを更新します。
- アプリケーション ログ内の未承認のアクセスを監視します。
Warnung
シークレットを再生成すると、以前のシークレットとそのシークレットで作成されたすべてのトークンが直ちに無効になります。
アプリを削除する
Warnung
アプリ登録を削除すると、それを使用しているすべてのアプリケーションが直ちに中断され、関連付けられているすべてのトークンが無効になります。
Azure DevOps OAuth アプリを削除するには:
Visual Studio プロファイルに移動します。
ドロップダウン メニューから適切なテナントを選択します。
[アプリケーションとサービス] でアプリを見つけます。
アプリケーション登録ページで [ 削除] を選択します 。
モーダル ダイアログで削除を確認します。
削除後、アプリとそのすべてのトークンはすぐに動作を停止します。
移行の計画
重要
今すぐ移行の計画を開始します。 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: 最新のエンタープライズ レベルの強化されたセキュリティ、長期的なサポート
次のステップ
既存のアプリケーションの場合:
新しいアプリケーションの場合: