Внедрить аутентификацию OAuth2 с IdP клиента - PullRequest
0 голосов
/ 04 марта 2019

У меня есть приложение WebForms.Пользователи могут подключаться, используя логин / пароль и стандартные OWIN-провайдеры (Facebook, Twitter, ...).

Но теперь у меня есть запрос на реализацию другого способа - OAuth2 - с существующим клиентским сервером.

Как это сделать самым простым способом?

Допустим, у нас есть новое приложение с идентификатором из стандартного шаблона Visual Studio.

Я знаю, что в OWIN есть много других провайдеров - OAuth, OpenIdConnect и т. Д. Но мне не повезло в реализации чистого OAuth2.отношения.

Пробовал OpenIdConnect

new OpenIdConnectAuthenticationOptions
{
    ClientId = "XXX",
    ClientSecret = "YYY",

    Configuration = new OpenIdConnectConfiguration
    {
        AuthorizationEndpoint = "https://example.com/oauth/authorize",
        TokenEndpoint = "https://example.com/oauth/token"
    }
}

Кажется, работает.Запрос создан, пользователь вводит учетные данные на внешнем IdP и код возвращается обратно.

Но как подключить это к стандартному потоку?Где должен быть ReturnUrl, чтобы иметь возможность обрабатывать code и аутентифицировать пользователя?Кажется, что не существует стандартного способа вызова перенаправления в \ Account \ RegisterExternalLogin.aspx, как для других провайдеров.

Мне нужно достичь стандартного потока

        var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
        var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();
        var loginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo();
        if (loginInfo == null)
        {
            RedirectOnFail();
            return;
        }
        var user = manager.Find(loginInfo.Login);
        if (user != null)
        {
            signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);
            IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
        }

Чего мне не хватает?

Или мне нужно использовать какого-либо провайдера из Microsoft.Owin.Security.OAuth пространства имен?

Мне нужен рабочий пример с полным потоком.Я не хочу реализовывать целое общение.Я надеюсь, что любой из поставщиков OWIN справится с этим.

...