Azure AD, утверждения AuthenticationTicketC#

Место общения программистов C#
Anonymous
Azure AD, утверждения AuthenticationTicket

Сообщение Anonymous »

Я работаю над веб-приложением ASP.NET на .NET 4.8 и получаю задание реализовать Azure AD для этого приложения.
Я создал этот файл start.cs< /код>:

Код: Выделить всё

[assembly: OwinStartup(typeof(ApplicationName.Startup))]

namespace ApplicationName
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
ClientId = ConfigurationManager.AppSettings["AzureAd:ClientId"],
Authority = $"{ConfigurationManager.AppSettings["AzureAd:Instance"]}{ConfigurationManager.AppSettings["AzureAd:TenantId"]}",
ClientSecret = ConfigurationManager.AppSettings["AzureAd:ClientSecret"],
RedirectUri = ConfigurationManager.AppSettings["AzureAd:RedirectUri"],
PostLogoutRedirectUri = ConfigurationManager.AppSettings["AzureAd:PostLogoutRedirectUri"],
SignInAsAuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = context =>
{
context.HandleResponse();
context.Response.Redirect("/Error/Errors?message=" + context.Exception.Message);
return Task.CompletedTask;
},
AuthorizationCodeReceived = async context =>
{
var clientId = ConfigurationManager.AppSettings["AzureAd:ClientId"];
var clientSecret = ConfigurationManager.AppSettings["AzureAd:ClientSecret"];
var authority = $"{ConfigurationManager.AppSettings["AzureAd:Instance"]}{ConfigurationManager.AppSettings["AzureAd:TenantId"]}";
var RedirectUri = ConfigurationManager.AppSettings["AzureAd:RedirectUri"];

var cca = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(clientSecret)
.WithAuthority(new Uri(authority))
.WithRedirectUri(RedirectUri)
.Build();

var result = await cca.AcquireTokenByAuthorizationCode(new[] { "User.Read" }, context.Code).ExecuteAsync();

// Extrair as informações do usuário a partir do token recebido
var userClaims = result.ClaimsPrincipal.Claims;
var identity = new ClaimsIdentity(context.AuthenticationTicket.Identity.AuthenticationType)
identity.AddClaims(userClaims);

// Adiciona a nova identidade com as reivindicações ao ticket
context.AuthenticationTicket = new AuthenticationTicket(identity, context.AuthenticationTicket.Properties);
}
}
});
}
}
}
И эта часть выглядит хорошо. Проблема в том, что когда я пытаюсь получить электронную почту пользователя в контроллере, утверждения полностью отличаются от тех, которые были при проверке переменной userClaims (

Код: Выделить всё

startup.cs
).
Код контроллера следующий:

Код: Выделить всё

[HttpGet]
public async Task ActionName()
{
var claimsPrincipal = HttpContext.User as ClaimsPrincipal;

if (claimsPrincipal != null)
{
// Obter as informações da clain
var userName = claimsPrincipal.FindFirst(ClaimTypes.Name)?.Value;
var userEmail = claimsPrincipal.FindFirst(ClaimTypes.Email)?.Value;

// more code...
}
}
Я проверил все утверждения внутри messagesPrincipal, и они полностью отличаются от утверждений в Startup.cs.
Я просто хочу получить электронное письмо от вошедшего в систему пользователя.

Подробнее здесь: https://stackoverflow.com/questions/786 ... ket-claims

Вернуться в «C#»