Как обращаться с провайдером идентификации, который использует временный NameID

Я пытаюсь использовать промежуточное программное обеспечение Sustainsys.Saml2.AspNetCore2 в своем приложении. Я успешно вошел в систему и зарегистрировал свой адрес электронной почты в первый раз, вышел из системы и попытался войти снова. Проблема, с которой я сталкиваюсь, заключается в том, что NameID используется в качестве ProviderKey в ASP.NET Identity, и меня просят предоставить мою электронную почту снова, как если бы я вошел в систему в первый раз. Отлаживая, почему это происходит, я вижу, что вызов:

signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: true, bypassTwoFactor: true);

возвращает {Failed}. Кроме того, я заметил, что ProviderKey отличается от того, что находится в таблице AspNetUserLogins. Как мне подключить второй логин того же внешнего идентификатора к внутреннему идентификатору, созданному на первом логине?

1 ответ

Если NameID является временным, его нельзя использовать в качестве ключа поставщика в Asp.Net Identity. Самый простой способ, конечно, это поговорить с Idp и попросить их переключиться на постоянный NameID.

Если это невозможно, проверьте, есть ли какой-либо атрибут, который является фиксированным и подходит для использования в качестве ключа. Затем вы можете переопределить AcsCommandResultCreated уведомление. Там удалите существующую заявку NameIdentifier и создайте новую из атрибута, который вы хотите использовать.

Другие вопросы по тегам