💻

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

2023/02/06に公開

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 のフローで scopeshttps://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