2017-01-27 14 views
15

Мне нужен пользователь для входа на веб-сайт, используя проверку подлинности на Facebook. Теперь мне нужно установить ссылку на пользовательский диск в Google (и другие службы). Я хочу использовать провайдеров ASP.Net Идентичность OAuth, удостоверяющих личность для обработки маркера обмена, но я не хочу его трогать существующий UserCredential или использовать его для SignIn в UserPrincipalDoes SignInAsAuthenticationType позволяет мне получить токен OAuth без перезаписи существующих требований?

Моя цель состоит в том, чтобы предотвратить

  • AuthenticateCoreAsync с возвратом AuthenticationTicket, который вносит изменения в действующий идентификатор пользователя
  • Пользователь, сокращающий систему аутентификации, используя претензии, полученные от Google. (Я должен был уже зарегистрировать пользователя с помощью других средств)
  • Предотвратить использование неожиданного токена/файла cookie для создания допустимого сеанса, создающего сценарий эскалации привилегий?

Вопрос

  1. Какой эффект установки пользовательских grantIdentity есть на IOwinContext.Authentication.SignIn()?

  2. Does SignInAsAuthenticationType решает мою потребность?

  3. Если нет, то когда это будет использоваться?

Теоретическое код с помощью провайдера 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

Чтобы уточнить, вы хотите войти в систему через свой личный профиль Facebook, а затем добавить другие идентификаторы, такие как Google, чтобы получить доступ к их ресурсам, но вы не хотите, чтобы пользователь мог войти в систему ваш сайт через других поставщиков (например, Google)? – Tratcher

+0

@Tratcher точно правильный. Хотя я использую идентификацию Facebook как «основной идентификатор», я на самом деле создаю свое собственное промежуточное ПО идентификации как вилку с существующим промежуточным программным обеспечением OpenIDConnect. (со ссылкой на исходный код Катаны) – LamonteCristo

+0

См. также возможность добавления нескольких типов аутентификации ... может быть релевантным http://stackoverflow.com/q/41985478/328397 – LamonteCristo

ответ

3

В Visual Studio 2015 MVC отдельных учетных записей шаблона делает что-то вроде этого. Вы создаете свою первую учетную запись (с локальным именем пользователя и паролем или удаленным провайдером), а затем вы можете связать другие идентификаторы с этим. Он связывает это, поддерживая два куки во время входа в систему, один для приложения и один для внешней идентификации.

Если вы посмотрите в ManageController в LinkLoginCallback, вы сможете настроить логику в этой точке для хранения внешних токенов идентификации, но не предоставлять ей доступ к вашему приложению.

Другими словами, логику, подобную этой, следует управлять на уровне авторизации в логике контроллера, а не на уровне аутентификации в промежуточном программном обеспечении auth.

+0

Понял, но код OpenID Connect, который запрашивает логин и имеет встроенную защиту CSRF, автоматически создает идентификатор ASP.NET при вызове SignIn.Я не хочу, чтобы какой-либо SignIn вызывался. Из того, что я могу сказать, SignInAsAuthenticationType позволяет это (без настройки логики), но я хочу убедиться, что я его правильно реализую. https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/facebook-logins – LamonteCristo

+0

Что случилось с SignIn для вторичного файла cookie? Пока это не ваш файл cookie приложения, он не будет использоваться для авторизации. – Tratcher

+0

Я не совсем уверен. Я хочу предотвратить ситуацию, когда несвязанный пользователь Google Мэллори добавляется к обычной учетной записи Facebook Алисы или Боба ... среди других угроз – LamonteCristo

0

Если ClaimsPrincipal.Identity.IsAuthenticated является ложным, тогда пользователю будет предложена страница входа.

 Смежные вопросы

  • Нет связанных вопросов^_^