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