Я использую IdentityServer3 для обработки аутентификации пользователей на веб-сайте asp mvc.IdentityServer3: объединить учетные данные вручную с помощью социальной опции
Экран входа в систему размещен в представлении самого приложения (не использующего неявный поток Identity Server). Я также предлагаю вариант «Войти с Google», который пользователь выбирает, нажав кнопку на экране входа в систему.
Любая страница, которая имеет [Авторизоваться] следует перенаправить неаутентифицированный пользователя на экране входа:
public void Configuration(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Cookies",
LoginPath = new PathString("/Account/Login")
});
}
Счет контура управления показан ниже. Сценарий «Аутентификация форм» будет работать (as described here).
Кнопка «Войти с помощью Google» работает as described here (пропуская страницу входа в ID-сервер, перейдя непосредственно в Google), указав параметр «acr_values».
Как я могу справиться с обратным вызовом из OpenID Connect после входа в систему Google? Я попытался добавить OpenId Connect middleware, но он не очень хорошо работает с функцией «LoginPath» в аутентификации Cookie: теперь пользователи, не прошедшие проверку подлинности, перенаправляются на экран входа в ID Server, а не на мой локальный экран входа.
Я ничего не вижу в IdentityServer samples, который обращается к этому сценарию.
public class AccountController : Controller
{
[HttpGet]
public ActionResult Login()
{
ViewBag.GoogleLogin = CreateLoginUrl("Google");
return View();
}
[HttpPost]
public ActionResult Login(LoginViewModel vm)
{
// Call IdentityServer here with credentials
// Validate token and do the Owin Authentication SignIn
// Redirect to 'ReturnUrl'
// If errors:
return View(vm);
}
public ActionResult Callback()
{
// What goes here??
return new RedirectResult("/");
}
private string CreateLoginUrl(string provider)
{
var state = Guid.NewGuid().ToString("N");
var nonce = Guid.NewGuid().ToString("N");
var request = new AuthorizeRequest(new Uri("https://localhost:44312/connect/authorize"));
var startUrl = request.CreateAuthorizeUrl(
clientId: "mvc",
responseType: "id_token token",
scope: "openid profile roles sampleApi",
redirectUri: "https://localhost:44319/Account/Callback",
state: state,
acrValues: "idp:" + provider,
nonce: nonce);
return startUrl;
}
}