🔍

Azure AD の OAuth で Azure DevOps REST API を実行する

に公開

Azure DevOps には REST API が提供されており、さまざまな操作ができます。Azure DevOps も SharePoint と同様に、歴史的な経緯から複数の認証方法をサポートしています。

  • Personal Access Token (PAT) による認証
  • https://app.vssps.visualstudio.com/oauth2/authorize エンドポイントを使用した OAuth による認証
  • Azure AD のエンドポイントを使用した OAuth による認証

もっともよく使われるのは PAT による認証です。PAT は Azure Repos の Git にアクセスする場合にも利用されるため、さまざまな場面で利用されます。PAT の場合は Basic 認証 (Authorization ヘッダーに空のユーザー名と PAT を Base64 エンコードして渡します) となるため、OAuth と比べて認証フローが簡単です。

https://learn.microsoft.com/ja-jp/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?WT.mc_id=M365-MVP-5002941

ただし、Azure DevOps を他のサービスと連携する際に毎回 PAT を要求するのは非現実的です。そのため、Azure AD で認証する必要があります。Azure AD の アプリの登録 - API のアクセス許可 で Azure DevOps を選択できるため簡単そうに見えます。しかし、実際にアクセス トークンを指定して API を呼び出すと HTTP 203 エラーコードが返されます。

これは OAuth のフローで scopes に https://app.vssps.visualstudio.com/user_impersonation を指定していることが原因です。Azure AD のポータル上ではこのように表示されますが、499b84ac-1321-427f-aa17-267ca6975798/user_impersonation が正解です。これについてはドキュメントに記載がなく、MSAL のサンプルを参照する必要があります。

https://github.com/microsoft/azure-devops-auth-samples/tree/master/ManagedClientConsoleAppSample

Discussion