Я пытаюсь получить информацию о профиле пользователя из Azure с помощью Graph. Если я загружаю один из примеров, он работает, но я не могу понять это для реального приложения. У меня не было проблем с регистрацией приложения на новом портале приложений, но я не могу успешно просмотреть данные профиля пользователя. Вот некоторый код:
[Authorize]
public async Task<ActionResult> About() {
try {
string signedInUserID = ClaimsPrincipal
.Current
.FindFirst(ClaimTypes.NameIdentifier)
.Value;
TokenCache userTokenCache = new MSALSessionCache(signedInUserID, this.HttpContext)
.GetMsalCacheInstance();
ConfidentialClientApplication cca = new ConfidentialClientApplication(
clientId,
redirectUri,
new ClientCredential(appKey),
userTokenCache,
null);
if (cca.Users.Count() > 0) {
string[] scopes = { "User.Read" };
AuthenticationResult result =
await cca.AcquireTokenSilentAsync(scopes, cca.Users.First());
HttpClient hc = new HttpClient();
hc.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", result.AccessToken);
HttpResponseMessage hrm = await hc.GetAsync("https://graph.microsoft.com/v1.0/me/");
string rez = await hrm.Content.ReadAsStringAsync();
ViewBag.Message = rez;
ViewBag.UserName = ClaimsPrincipal.Current.FindFirst("preferred_username").Value;
} else { }
return View();
} catch (MsalUiRequiredException) {
ViewBag.Relogin = "true";
return View();
} catch (Exception eee) {
ViewBag.Error = "An error has occurred. Details: " + eee.Message;
return View();
}
}
После входа я ничего не вижу в представлении:
@{
ViewBag.Title = "About";
}
<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>
<p>Use this area to provide additional information.</p>
@{
if (ViewBag.Error != null)
{
<p class="red">Error: @ViewBag.Error</p>
}
}
<div>Name: @ViewBag.UserName</div>
<div>ObjectId: @ViewBag.ObjectId </div>
<div>Given Name: @ViewBag.GivenName </div>
<div>Surname: @ViewBag.Surname </div>
<div>UPN: @ViewBag.UPN</div>
<div>Home phone: @ViewBag.HomePhone</div>
<div>Mobile phone: @ViewBag.MobileNumber</div>
<div>Other phone: @ViewBag.OtherPhone</div>
<div>User Data: @ViewBag.UserData</div>