У нас есть устаревшая система, построенная на ASP.NET Mvc 4, теперь мы хотели бы поддерживать Signal Sign On через Azure Active Directory для текущих пользователей, а также для новых пользователей. Поскольку мы управляли собственным рабочим процессом проверки подлинности, ASP.NET Identity определенно не подходит для нашего случая.
Мне удалось создать демонстрацию, которая работает в пассивном режиме промежуточного программного обеспечения OWIN OpenIdConnect без использования ASP.NET Identity. Код ниже работает правильно:
app.SetDefaultSignInAsAuthenticationType("ExternalCookie");
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "ExternalCookie",
AuthenticationMode = AuthenticationMode.Passive,
});
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Passive,
ClientId = ClientId,
Authority = Authority
// More code
});
И в ExternalLoginCallback
действии:
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var authManager = Request.GetOwinContext().Authentication;
var result = await authManager.AuthenticateAsync("ExternalCookie");
authManager.SignOut("ExternalCookie");
//More code to convert to local identity
}
Этот случай действительно распространен даже при использовании других провайдеров, таких как Google, Facebook или Twitter. Единственное, что мне не совсем ясно, это ExternalCookie
, возможно, я все пропустил. Насколько я понимаю, при успешном внешнем входе в систему внешний файл cookie используется для хранения идентификатора внешней претензии. И тогда мы звоним:
var result = await authManager.AuthenticateAsync("ExternalCookie");
authManager.SignOut("ExternalCookie");
Чтобы получить удостоверение внешнего утверждения, а затем преобразовать внешнее удостоверение в локальное удостоверение. У меня есть небольшое замешательство, почему мы должны вызывать SignOut
внешний файл cookie в этом случае.
Кроме того, я не уверен, является ли внешний файл cookie обязательным при использовании внешнего входа в систему, или у нас есть другие способы обхода без использования внешнего файла cookie.
Пожалуйста, кто-нибудь, дайте объяснение по этому вопросу.