2017-01-27 34 views
15

Potrzebuję użytkownika, aby zalogować się do witryny przy użyciu po wyjęciu z pudełka uwierzytelnienia na Facebooku. Muszę teraz połączyć się z dyskiem użytkowników w Google (i innych usługach). Chcę używać dostawcy ASP.Net Tożsamość Tożsamość OAuth do obsługi tokenu wymiany, ale nie chce go dotknąć istniejący UserCredential lub użyć go do SignIn z UserPrincipalCzy metoda SignInAsAuthenticationType pozwala mi uzyskać token OAuth bez nadpisywania istniejących roszczeń?

Moim celem jest zapobieganie

  • AuthenticateCoreAsync z powodu zwrócenia numeru AuthenticationTicket powodującego modyfikacje bieżącego zalogowanego użytkownika.
  • Użytkownik skracający system uwierzytelniania za pomocą roszczeń uzyskanych od Google. (Powinienem już mieć zalogowanego użytkownika za pomocą innych środków)
  • Uniemożliwić użycie nieoczekiwanego tokenu/pliku cookie do utworzenia prawidłowej sesji, tworząc scenariusz eskalacji uprawnień?

Pytanie

  1. Jaki wpływ ma ustawienie zwyczaj grantIdentity mieć na IOwinContext.Authentication.SignIn()?

  2. Czy SignInAsAuthenticationType rozwiązuje moje potrzeby?

  3. Jeśli nie, kiedy to zostanie użyte?

kod teoretyczna przy użyciu dostawcy Google

// The cookie needs to be First in the chain. 
app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = "CustomExternal", 
    AuthenticationMode = AuthenticationMode.Passive, 
    CookieName = "MyAwesomeCookie", 
    ExpireTimeSpan = TimeSpan.FromMinutes(5), 
    //Additional custom cookie options.... 
}); 

//Note that SignInAsAuthenticationType == AuthenticationType 
app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions 
{ 
    AuthenticationType = "GoogleBackOffice", 
    ClientId = "abcdef...", 
    ClientSecret = "zyxwv....", 
    SignInAsAuthenticationType = "CustomExternal" 
}); 
+0

Aby wyjaśnić, chcesz zalogować się do użytkownika za pośrednictwem jego tożsamości na Facebooku, a następnie chcesz dodać inne tożsamości, takie jak Google, aby uzyskać dostęp do ich zasobów, ale nie chcesz, aby użytkownik mógł się zalogować do twoja strona za pośrednictwem innych dostawców (np. Google)? – Tratcher

+0

@ Doktor dokładnie poprawne. Chociaż używam tożsamości Facebooka jako "podstawowego identyfikatora", w rzeczywistości będę tworzyć własne oprogramowanie pośredniczące w tożsamości jako rozwidlenie istniejącego oprogramowania pośredniego OpenIDConnect. (w odniesieniu do Katana Sourcecode) – LamonteCristo

+0

Zobacz także możliwość dodawania wielu typów uwierzytelniania ... może być istotna http://stackoverflow.com/q/41985478/328397 – LamonteCristo

Odpowiedz

3

Visual Studio 2015 MVC Indywidualne Konta użytkowników szablon robi coś takiego. Tworzysz swoje pierwsze konto (z lokalną nazwą użytkownika i hasłem lub zdalnym dostawcą), a następnie możesz powiązać inne tożsamości z tym kontem. Robi to poprzez utrzymywanie dwóch plików cookie podczas logowania, jednego dla aplikacji i drugiego dla zewnętrznej tożsamości.

Jeśli zajrzysz do ManageController pod LinkLoginCallback, powinieneś być w stanie poprawić logikę w tym punkcie, aby przechowywać tokeny tożsamości zewnętrznej, ale nie możesz jej przyznać dostępu do swojej aplikacji.

Innymi słowy, logika w ten sposób powinna być zarządzana w warstwie autoryzacji w logice sterownika, a nie w warstwie uwierzytelniania w auth middleware.

+0

Zrozumiana, ale kod OpenID Connect, który prosi o logowanie, oraz ma wbudowaną ochronę CSRF, automatycznie tworzy tożsamość ASP.NET po wywołaniu SignIn.Nie chcę wywoływać żadnego SignIn. Z tego, co mogę powiedzieć, SignInAsAuthenticationType pozwala na to (bez konieczności podkręcania logiki), ale chcę się upewnić, że implementuję go poprawnie. https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/facebook-logins – LamonteCristo

+0

Co jest nie tak z SignIn dla dodatkowego pliku cookie? Dopóki nie jest to plik cookie Twojej aplikacji, nie zostanie użyty do autoryzacji. – Tratcher

+0

Nie jestem całkowicie pewien. Chcę zapobiec sytuacji, w której niepowiązany użytkownik Google Mallory zostanie dodany do zwykłego konta Alicji lub Boba na Facebooku ... wśród innych zagrożeń – LamonteCristo

0

Jeśli ClaimsPrincipal.Identity.IsAuthenticated ma wartość false, użytkownik zostanie zakwestionowany ze stroną logowania.

Powiązane problemy