0

正常に動作するマルチテナント Web API を作成しました。ここで、テスト用のネイティブ クライアントを構築したいと考えています。Web API アプリは 1 つのテナントで定義されます。テスト アプリは、Web API に管理者の同意を与えた別のテナントで定義されています。

(非インタラクティブな) 統合テストで、ネイティブ アプリを使用してユーザー名とパスワードで認証したいと考えています。実際のユーザー コンテキストが必要なため、証明書/アプリのみの認証を使用できません。

トークンの取得

var userCredential = new UserCredential("admin@clienttenant.onmicrosoft.com", "password");
var context = new AuthenticationContext("https://login.windows.net/common");

return context.AcquireToken("https://webapitenant.onmicrosoft.com/webApiResourceUri", testClientId, userCredential).AccessToken;

このコードの問題は、ユーザーがアプリ登録と同じテナントにいる場合でも、ネイティブ アプリに管理者の同意を与えるまで機能しないことです。

スローされた例外:

'Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException' in Microsoft.IdentityModel.Clients.ActiveDirectory.dll

Additional information: 
AADSTS65001: The user or administrator has not consented to use the application with ID 'nativeclientid'. Send an interactive authorization request for this user and resource. 

テストはインタラクティブではないため、上記のコードを使用するコンソール アプリケーションを作成する必要がありますが、PromptBehaviour.Always. これにより、ユーザー名とパスワードの入力が求められ、同意フォームが表示されます。同意すると、同じネイティブ アプリ登録を使用しているテストが機能し始めます。

対話型 GUI を使用せずに同意書を受け入れる方法はありますか?

4

1 に答える 1