Внешний файл cookie для внешнего входа в ASP.NET OWIN

У нас есть устаревшая система, построенная на 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.

Пожалуйста, кто-нибудь, дайте объяснение по этому вопросу.


person cuongle    schedule 27.04.2015    source источник
comment
На ваш первый вопрос: SignOut, это очистка. См. этот вопрос SO. Что касается вашего третьего вопроса: имя ExternalCookie, я уверен, что это просто для того, чтобы ваш код аутентификации ссылался на тот же файл cookie. Если бы вы заменили все экземпляры строкового литерала ExternalCookie в своем коде, скажем, на BlergyBlergy, функциональность все равно работала бы. Изучите файлы cookie вашего браузера непосредственно во время веб-жизненного цикла, чтобы проиллюстрировать это.   -  person Chris Simmons    schedule 28.04.2015
comment
У Брока Аллена есть отличный учебник по теме внешнего входа здесь.   -  person Chris Simmons    schedule 28.04.2015
comment
@ChrisSimmons: Спасибо за ссылку, я также нашел этот ответ stackoverflow.com/questions/ 26166826/ очень хорошо объяснено.   -  person cuongle    schedule 28.04.2015


Ответы (1)


Чтобы ответить на ваш последний вопрос, вы меняете имя файла cookie в файле startup.auth, где вы настраиваете внешний файл cookie -

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

Вы можете использовать строку вместо перечисления DefaultAuthenticationTypes и напрямую указать имя файла cookie, например -

app.UseExternalSignInCookie("myExternalCookie");
person naveenraina    schedule 20.02.2017
comment
в вашем случае вы уже используете строки, поэтому вам просто нужно указать другое имя. - person naveenraina; 20.02.2017