【发布时间】:2017-11-06 22:34:06
【问题描述】:
如果我通过 API 管理从客户端(例如本机控制台应用)调用我的 API,我的 User.Identity.Name 为空,并且后端 API 中的 IsAuthenticated 为 False。
如果我通过 API 管理门户网页(Try It 测试门户)调用我的 API,我的服务器端 API 代码能够看到我的 User.Identity (User.Identity.Name, User.Identity.IsAuthenticated)。
在我的客户端,我得到一个令牌,然后调用一个通过 Azure API 管理公开的 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 的 User.Identity(当然,我的 API 不知道它是通过 API 管理门户调用的)。 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
【问题讨论】:
标签: c# azure-active-directory azure-api-management