используя GoogleOAuth2AuthenticationOptions получил ошибку несоответствия uri перенаправления
Я пытаюсь реализовать аутентификацию Google в веб-приложении MVC 5. Аутентификация работает нормально, но я бы извлек информацию профиля и изображения.
Чтобы сделать это, я добавил GoogleOAuth2AuthenticationOptions объекта для указания дополнительных требований :
var googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions
{
ClientId = "xxxxxxxxxxxxxxxx",
ClientSecret = "xxxxxxxxxxxxxxxxx",
CallbackPath = new PathString("/Account/LoginCallback"),
Provider = new GoogleOAuth2AuthenticationProvider()
{
OnAuthenticated = async context =>
{
context.Identity.AddClaim(new Claim("picture", context.User.GetValue("picture").ToString()));
context.Identity.AddClaim(new Claim("profile", context.User.GetValue("profile").ToString()));
}
}
};
app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions);
Но это приводит к тому, что генерируется неправильный URL-адрес :
Нет '?"перед параметрами, это вызывает redirect_uri_mismatch.
Однако, когда я использую просто:
app.UseGoogleAuthentication(
clientId : "xxxxxxxxxxxxxxxxxxx",
clientSecret : "xxxxxxxxxxxxxxxxx");
Это работающий.
Есть идеи ?
2 ответа:
Используйте только это.
var googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions { ClientId = "MYCLIENTID", ClientSecret = "MYSECRET", }; app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions);
Этот метод, по-видимому, автоматически использует запрос signin-google в address.To исправьте это изменение местоположения обратного вызова google в консоли google, чтобы указать на этот адрес.
Добавить файл RouteConfig
routes.MapRoute( name: "signin-google", url: "signin-google", defaults: new { controller = "Account", action = "LoginCallback" } );
Используйте этот приведенный ниже фрагмент кода, который работает нормально, просто замените ClientID, и ClientSecret будет работать для вас.
var googleOptions = new GoogleOAuth2AuthenticationOptions() { ClientId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", ClientSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", Provider = new GoogleOAuth2AuthenticationProvider() { OnAuthenticated = (context) => { context.Identity.AddClaim(new Claim("urn:google:name", context.Identity.FindFirstValue(ClaimTypes.Name))); context.Identity.AddClaim(new Claim("urn:google:email", context.Identity.FindFirstValue(ClaimTypes.Email))); //This following line is need to retrieve the profile image context.Identity.AddClaim(new System.Security.Claims.Claim("urn:google:accesstoken", context.AccessToken, ClaimValueTypes.String, "Google")); return Task.FromResult(0); } } }; app.UseGoogleAuthentication(googleOptions);
Если все еще существует ошибка
Предположим, что URI вашего приложения соответствует приведенному ниже
Затем на console.developers.google.com URI, который вы зарегистрировали, необходимо изменить, как показано ниже.
Просто добавьте [signin-google] в URI на конец
Http://localhost:2625/signin-google
И, наконец, сохранить его.