У меня есть приложение 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 справится с этим.