Как сохранить метод аутентификации в файле cookie, чтобы можно было адаптировать выход из системы в ядре asp.net mvcC#

Место общения программистов C#
Ответить
Anonymous
 Как сохранить метод аутентификации в файле cookie, чтобы можно было адаптировать выход из системы в ядре asp.net mvc

Сообщение Anonymous »

Мы используем ядро ​​asp.net mvc для написания веб-приложения. Это приложение требует нескольких форм аутентификации. На данный момент это имя пользователя/пароль и Microsoft Entra. Но в будущем может быть добавлено больше.
При выходе пользователя из приложения мы хотели бы знать, какой метод аутентификации использовался для входа в систему. Если, например, использовалась Entra, мы ' Я хотел бы отправить пользователя на https://login.microsoftonline.com/commo ... 2.0/logout, чтобы он правильно вышел из поставщика идентификаторов.
Я подумал, что хорошей идеей было бы сохранить дополнительное утверждение в файле cookie при входе в систему. Я попытался добавить для этого следующий код:

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

 services.AddAuthentication()
.AddMicrosoftIdentityWebApp(options =>
{
options.Instance = "https://login.microsoftonline.com";
options.TenantId = "common";
options.ClientId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
options.ClientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
options.Scope.Add("email");

options.Events.OnTokenValidated = async context =>
{
var claim = new Claim(ClaimTypes.AuthenticationMethod, "Microsoft");
var claimsIdentity = context.Principal.Identity as ClaimsIdentity;
claimsIdentity.AddClaim(claim);
await Task.CompletedTask;
};

}, openIdConnectScheme: "Microsoft", cookieScheme: null);
Вход осуществляется с использованием этого кода в методе обратного вызова, который вызывается, когда пользователь возвращается от провайдера (в данном случае Entra):

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

    var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
return RedirectToAction(nameof(Login));

}

// Sign in the user with this external login provider if the user already has a login.
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor: true);
if (result.Succeeded)
{
Во время выхода из системы я пытаюсь получить метод аутентификации Claim с помощью этого кода:

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

    var scheme = User.FindFirstValue(ClaimTypes.AuthenticationMethod);

// Make some decisions based on scheme....
К сожалению, схема недействительна.
Я делаю что-то не так? Возможно, я все делаю неправильно.
Буду благодарен за любые подсказки.

Подробнее здесь: https://stackoverflow.com/questions/784 ... apted-in-a
Ответить

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

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

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

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

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