В моем веб-приложении я зарегистрировал Google как поставщика единого входа:
app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions {
ClientId = "8765.......apps.googleusercontent.com",
ClientSecret = "Secret"
})
Мое приложение не позволяет пользователям регистрироваться/регистрироваться (вместо этого их учетные записи создаются администратором, но позже они могут связать свою учетную запись с Google).
В моем контроллере «Войти с помощью Google» я пытаюсь выполнить Challenge()
для перенаправления в Google. Возможно, это неправильный подход:
string redirectUri = "http://localhost:55262/SSO/Google/ProcessToken"; // actually created in code, but shown as string for clarity
AuthenticationProperties properties = new AuthenticationProperties();
properties.RedirectUri = Server.UrlEncode(redirectUri);
Context.GetOwinContext().Authentication.Challenge(properties, "Google");
Это правильно отправляет пользователя в Google, но затем Google выдает Error: redirect_uri_mismatch, сообщая, что:
URI перенаправления в запросе: http://localhost:55262/signin-google не соответствует зарегистрированному URI перенаправления.
Я видел эту ошибку раньше, когда коллекция URI возврата в панели управления Google не содержала указанного redirect_uri
.
Если я выполняю отладку в VS2015, я вижу, что свойство redirect_uri
правильно установлено в AuthenticationProperties
, но кажется, что OWIN/Katana не передает его в Google. Вместо этого, когда я нажимаю Google, return_uri используется по умолчанию для OWIN/Katana. Тот, который я установил, игнорируется.
Детали запроса Google, кажется, подтверждают это:
scope=openid profile email
response_type=code
redirect_uri=http://localhost:55262/signin-google
Что я делаю неправильно здесь, пожалуйста? Не следует ли использовать Challenge()
, чтобы пользователи могли связать свои локальные учетные записи приложений с Google?