User.Identity.IsAuthenticated имеет значение false в методах, не связанных с аутентификацией, после успешного входа в сиC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 User.Identity.IsAuthenticated имеет значение false в методах, не связанных с аутентификацией, после успешного входа в си

Сообщение Anonymous »

Я новичок в ядре asp.net. Я пытаюсь войти в систему с помощью Discord в качестве сторонней службы входа (например, вход с помощью Facebook, Google).
Я могу успешно войти в систему, получить свой пользовательский объект, утверждения и войти в класс который имеет атрибут авторизации. Ниже вы можете видеть, что с UserIdentity все в порядке.
Изображение
< /p>
Но предположим, что пользователь хочет вернуться на страницу входа. В этом случае мне нужно перенаправить его в индекс, но я хочу проверить, аутентифицирован ли пользователь или нет, используя Identity, и, к сожалению, это ложь, никаких претензий и т. д. Насколько я понимаю, это может быть связано с файлами cookie или чем-то еще. похожий. Я также использую другой атрибут для класса (не авторизовать, а разрешить анонимно). Вы можете увидеть ниже мой объект Identity
[img]https://i. sstatic.net/J3OWK.png[/img]

Я делюсь своим кодом аутентификации

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

services.AddAuthentication(options =>
{
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;

})
.AddCookie(options =>
{
options.ExpireTimeSpan = TimeSpan.FromMinutes(30);
options.Cookie.MaxAge = options.ExpireTimeSpan;
options.SlidingExpiration = true;
options.EventsType = typeof(CustomCookieAuthenticationEvents);
options.AccessDeniedPath = "/auth/DiscordAuthFailed";

})
.AddJwtBearer(options =>
{
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = false,
ValidateAudience = false,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration.GetValue("Jwt:Issuer"),
ValidAudience = Configuration.GetValue("Jwt:Audience"),
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(Configuration.GetValue("Jwt:EncryptionKey")))
};
})
.AddOAuth("Discord",
options =>
{
options.AuthorizationEndpoint = "https://discord.com/api/oauth2/authorize";
options.TokenEndpoint = "https://discord.com/api/oauth2/token";
options.Scope.Add("identify");
options.Scope.Add("email");
options.Scope.Add("guilds.join");
options.Scope.Add("guilds.members.read");

options.CallbackPath = "/auth/oauthCallback";
options.ClientId = Configuration.GetValue("Discord:ClientId");
options.ClientSecret = Configuration.GetValue("Discord:ClientSecret");
options.UserInformationEndpoint = "https://discord.com/api/users/@me";

options.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "id");
options.ClaimActions.MapJsonKey(ClaimTypes.Name, "username");
options.ClaimActions.MapJsonKey(ClaimTypes.Email, "email");
options.ClaimActions.MapJsonKey(ClaimTypes.IsPersistent, "verified");

options.AccessDeniedPath = "/auth/DiscordAuthFailed";
options.Events = new OAuthEvents()
{
OnCreatingTicket = async context =>
{
var request = new HttpRequestMessage(HttpMethod.Get,
context.Options.UserInformationEndpoint);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", context.AccessToken);
var response = await context.Backchannel.SendAsync(request,
HttpCompletionOption.ResponseHeadersRead, context.HttpContext.RequestAborted);

response.EnsureSuccessStatusCode();

var user=(await JsonDocument.ParseAsync(await response.Content.ReadAsStreamAsync())).RootElement;

context.RunClaimActions(user);

}
};
});
services.AddTransient();
Итак, мой вопрос заключается в том, как лучше всего получить доступ к объекту userIdentify в любом классе/методе после успешного завершения войти?

Подробнее здесь: https://stackoverflow.com/questions/709 ... cessful-lo
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • ASP.NET Core MVC, использующий API с токенами JWT. User.Identity.IsAuthenticated возвращает false
    Anonymous » » в форуме C#
    0 Ответы
    64 Просмотры
    Последнее сообщение Anonymous
  • Request.IsAuthenticated всегда имеет значение false во время входа в среду с балансировкой нагрузки.
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • User.Identity.IsAuthenticated всегда ложь в пользовательской аутентификации ядра .net.
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Добавить свойство в Identity, чтобы иметь user.identity.score
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Добавить свойство в Identity, чтобы иметь user.identity.score
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

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