1

AzureAD 認証で保護されている REST API を呼び出そうとしています。Postman REST クライアントからは、 https://example.com/getexample Header: Authorization: Bearer のように機能します。ユーザーのトークンをインタラクティブに取得すると、これはうまく機能します(device_codeまたはMFAの例)。

コードを非対話的に実行したかったので、サービス プリンシパルによって REST エンドポイントを認証しようとしています。

REST サーバーは、azure-passport node.js パッケージを使用して nodejs に組み込まれています。

サービス プリンシパル (ネイティブ アプリ) とそのシークレットを作成しました。このパッケージとcurlコマンドの下からaccess_tokenを取得できました

curl -X POST -d 'grant_type=client_credentials&client_id=[client id]&client_secret=[client secret]&resource=[client id of the server]' https://login.microsoftonline.com/[tenant]/oauth2/token

しかし、この生成されたトークンを REST エンドポイントに渡すと、401 が返されます。

サービス プリンシパルとシークレットを使用してカスタム REST エンドポイントを認証する方法を教えてください。

以下は、サービスプリンシパル(サーバーとクライアント)に対して行った構成の詳細です

サーバー SP(node.js アプリ) サービス プリンシパルの作成、User.Read API 権限の追加。管理者 API 権限を付与しました。「API の公開」の下にカスタム スコープ (API.Access) を作成し、「管理者とユーザー」を選択して付与できます。node.js アプリケーションでは、user.read スコープのみを使用しています

クライアント SP(Postman) サービス プリンシパルを作成し、サーバー SP(Customer スコープ) を API 権限の下に追加しました curl コマンドを使用して、スコープを渡さずにアクセス トークンを取得しました。

4

1 に答える 1