7

Mamy starego systemu, który jest zbudowany na ASP.NET MVC 4, teraz chcielibyśmy wspierać Signal Sign On poprzez Azure Active Directory dla obecnych użytkowników, jak i nowych użytkowników. Ponieważ zarządzamy własnym przepływem pracy uwierzytelniania, ASP.NET Identity zdecydowanie nie pasuje do naszego przypadku.Zewnętrzna Cookie na Zewnętrznych logowania w ASP.NET OWIN

udało mi się zbudować demo, które działa na middleware trybie pasywnym OWIN OpenIdConnect bez użycia Tożsamość ASP.NET. Poniższy kod działa poprawnie:

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 
    }); 

I ExternalLoginCallback działania:

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 
} 

Ta sprawa jest bardzo powszechne, nawet przy użyciu innych dostawców, takich jak Google, Facebook czy Twitter. Jedną rzeczą, której nie mam zbyt wiele do powiedzenia, jest ExternalCookie, może tęskniłem za całością. Rozumiem, że kiedy logowanie zewnętrzne zakończyło się powodzeniem, zewnętrzny plik cookie służy do przechowywania tożsamości zewnętrznego oświadczenia. Następnie wywołujemy:

var result = await authManager.AuthenticateAsync("ExternalCookie"); 
authManager.SignOut("ExternalCookie"); 

Aby uzyskać tożsamość zewnętrznego oświadczenia, a następnie przekonwertować tożsamość zewnętrzną na tożsamość lokalną. Mam pewne zamieszanie, dlaczego w tym przypadku musimy wywołać zewnętrzny plik cookie SignOut.

Ponadto, nie jestem pewien, czy zewnętrzna Cookie jest koniecznością podczas korzystania logowanie zewnętrznego, czy mamy inne sposoby wokół bez użycia zewnętrznego Cookie.

Proszę ktoś wyjaśnić w tej kwestii.

+1

Na pierwsze pytanie dotyczące: SignOut, to jest porządkowanie. Zobacz [to pytanie SO] (http://stackoverflow.com/questions/20569396/why-call-signoutdefaultautenticationtypes-externalcookie-before-use-of-applic). Na twoje trzecie pytanie dotyczące nazwy "ExternalCookie" jestem pewien, że jest to po prostu zachowanie twojego kodu uwierzytelniającego odnoszącego się do tego samego pliku cookie. Gdyby zamienić wszystkie wystąpienia literału "ExternalCookie" w swoim kodzie na, powiedzmy "BlergyBlergy", funkcjonalność nadal by działała. Sprawdź pliki cookie przeglądarki bezpośrednio podczas cyklu życia sieci, aby je zilustrować. –

+1

Brock Allen ma wielką [podkładu na całej zewnętrznej logowania temat tutaj] (http://brockallen.com/2014/01/09/a-primer-on-external-login-providers-social-logins-with-owinkatana -authentication-middleware /). –

+0

@ChrisSimmons: Dzięki za link, ja też uznało tę odpowiedź http://stackoverflow.com/questions/26166826/usecookieauthentication-vs-useexternalsignincookie jest bardzo dobrze wyjaśnione. –

Odpowiedz

1

Aby odpowiedzieć na to ostatnie pytanie, gdzie można skonfigurować plik cookie zewnętrznego zmienić nazwę pliku cookie w startup.auth plik -

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

Można użyć ciąg zamiast DefaultAuthenticationTypes wyliczenia i bezpośrednio określić nazwę ciasteczko jak -

app.UseExternalSignInCookie("myExternalCookie"); 
+0

w twoim przypadku, gdy już używasz napisów, więc musisz tylko podać inną nazwę. – naveenraina