クライアント アプリケーションで使用される Web API を開発しています。私が使用したAD認証メカニズムは、「アプリケーションのアクセス許可でWeb APIを呼び出す」です。
クライアント アプリは、アプリケーションのアクセス許可を使用して Web API を呼び出します。Web API では、Azure リソースを管理するために Azure Rest API を使用しようとしています。Azure Rest API は、ユーザー アサーションを使用してトークンを生成することにより、ユーザーに代わって使用されています。
私たちは遭遇しています
"AADSTS50058: サイレント サインイン要求が送信されましたが、ユーザー トークン生成の代理でサインインしているユーザーがいません"
アクセストークンを生成しようとしたとき。
Application Identity with OAuth 2.0 Client Credentials Grant
クライアント アプリから Web APIへのアプローチがアプローチに従い、Web API がクライアント AD アプリに代わって Azure REST/Managment API を使用しようとする場合、ユーザー シナリオの代わりに機能しますか?
ClientCredential clientCredential = new ClientCredential(ConfigurationManager.AppSettings["ida:ClientId"], ConfigurationManager.AppSettings["ida:SecretKey"]);
AuthenticationContext authContext = new AuthenticationContext(authority);
var bootstrapContext = ClaimsPrincipal.Current.Identities.First().BootstrapContext;
string userName = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn) != null ? ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn).Value : ClaimsPrincipal.Current.FindFirst(ClaimTypes.Email).Value;
UserAssertion userAssertion = new UserAssertion(bootstrapContext.ToString(), "urn:ietf:params:oauth:grant-type:jwt-bearer", userName);
AuthenticationResult result = await authContext.AcquireTokenAsync(ConfigurationManager.AppSettings["AzureResourceManagerIdentifier"], clientCredential, userAssertion);
// Get subscriptions to which the user has some kind of access
//string requestUrl =https://management.azure.com/subscriptions?api-version=2014-04-01"
string requestUrl = string.Format("{0}/subscriptions?api-version={1}", ConfigurationManager.AppSettings["AzureResourceManagerUrl"], AzureResourceManagerAPIVersion);
// Make the GET request
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUrl);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
HttpResponseMessage response = client.SendAsync(request).Result;
if (response.IsSuccessStatusCode)