API管理を使用してクライアント(例:ネイティブコンソールアプリケーション)からAPIを呼び出すと、User.Identity.Nameは空になり、IsAuthenticatedはバックエンドAPIではFalseです。Azure API Managementを介してAPIを呼び出すと、User.Identity.Nameが空になる
API管理ポータルのWebページ(Try Itテストポータル)を使用してAPIを呼び出すと、サーバー側のAPIコードでUser.Identity(User.Identity.Name、User.Identity.IsAuthenticated )。
私のクライアント側では、トークンを取得してから、Azure API Managementを介して公開されているAPIを呼び出しています。サーバー上で
HttpClientHandler handler = new HttpClientHandler
{
UseDefaultCredentials = true
};
client = new HttpClient(handler);
authContext = new AuthenticationContext(AADInstance);
PlatformParameters platformParameters = new PlatformParameters(PromptBehavior.Auto);
AuthenticationResult authResult = await authContext.AcquireTokenAsync(apiResourceId, clientId, redirectUrl, platformParameters);
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(authResult.AccessTokenType, authResult.AccessToken);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Connection.Add("Keep-Alive");
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
client.DefaultRequestHeaders.Add("Host", "...");
client.BaseAddress = new Uri(baseAddress);
var response = await GetResponseAsync(baseAddress + "Diagnostics");
、私は(私のAPIは、もちろん、それはAPI管理ポータルから呼び出されていることを知らない)APIを呼び出しUser.Identityを取得しようとしています。 User.Identity.Nameは空、AuthenticationTypeは空、IsAuthenticatedフラグはFalseです。これらの値は、API管理ポータル「試してください」機能を使用してAPIを呼び出すと正しく挿入されます。
HttpContext context = HttpContext.Current;
userName = User.Identity.Name; //is empty
ClaimsIdentity claimsIdentity = (ClaimsIdentity)User.Identity;
items.Add($"Authentication Type: '{claimsIdentity.AuthenticationType}'"); // is empty
items.Add($"Is Authenticated: {claimsIdentity.IsAuthenticated}"); // is False
Try itポータルが使用している「clientID」がわかりません。 Ocp-Apim-Subscription-Key、Authorization Bearerトークン、およびサブスクリプションキーのみがリストされています。私はAADのConsoleアプリケーションの "clientID"を承認しました。私はHTTPsを使用しています(WebサービスURLとWeb API URLスキームは両方ともHTTPsに設定されています)。私はベアラトークンを送信していることをコードで知っているので、まだJWT検証の検証を設定しようとはしていません。 – JordanBean