23

Şu anda Google'a giriş yapma sürecimi, OpenID oturum açma yöntemini kullanmadan önce OAuth kullanması için yükseltiyorum.MVC5'de OWIN Oauth kullanmayan Google Kimlik Doğrulama HariciLoginCallback işlevine isabet etmiyor

Şu ana kadar belirttiğim adımlar, Microsoft.Owin.Security.Google paketini 2.1.0 sürümüne yükselttiğimde, bu sürümde, UseGoogleAuthentication yönteminde seçenekler ekleme olanağı bulunduğundan.

ben linkte Alex Buğday en Çözüm kullanmaya çalıştık: Get ExtraData from MVC5 framework OAuth/OWin identity provider with external auth provider

(ayrıca Facebook kimlik içerir) Startup.Auth.cs kod bu gider: Buna

var facebookAuthenticationOptions = new FacebookAuthenticationOptions() 
     { 
      AppId = "MYAPPID", 
      AppSecret = "MYSECRET" 
     }; 
     facebookAuthenticationOptions.Scope.Add("email"); 
     app.UseFacebookAuthentication(facebookAuthenticationOptions); 

     app.UseGoogleAuthentication(); 

:

var facebookAuthenticationOptions = new FacebookAuthenticationOptions() 
     { 
      AppId = "MYAPPID", 
      AppSecret = "MYSECRET" 
     }; 
     facebookAuthenticationOptions.Scope.Add("email"); 
     app.UseFacebookAuthentication(facebookAuthenticationOptions); 


     var googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions 
     { 
      ClientId = "MYCLIENTID", 
      ClientSecret = "MYSECRET", 
      CallbackPath = new PathString("/en/Account/ExternalLoginCallback"), 
      Provider = new GoogleOAuth2AuthenticationProvider() 
      { 

      } 
     }; 

     app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions); 

Google Kimlik Doğrulama seçenekleri ekledikten sonra benim app için ExternalLoginCallback eylemi izin vermez google veya facebook için çağrılmalıdır (facebook kodunda herhangi bir değişiklik yapılmaz ama sorun hala bunu etkiler). Ön ucunda

, dış giriş düğmeleri tıkladıktan sonra sayfa aşağıdaki linke beni yönlendirir ve boş beyaz ekran döndürür

https ....../tr/Hesap/ExternalLoginCallback # __ = _ (= işaretinden önce sadece tek bir alt çizgi var, adres çubuğumda göründüğü halde SO sözdizimi kaldırır). facebook için

ve

https ....../tr/Hesap google/ExternalLoginCallback

. normalde (Bu işlev içinde hata ayıklama kesme noktaları yerleştirmek için çalıştık ve bu bilgi google kimlik doğrulama seçeneği olduğunda durduruldu geçmez gibi aşağıda kontrolör yöntemi isabet etmez.

// GET: /Account/ExternalLoginCallback 
    [AllowAnonymous] 
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl) 
    { 

Google'dan kimlik doğrulama seçeneklerini kaldırırsanız Doğrulama, sadece eski OpenID giriş geri döner ve tekrar çalışıyor.

burada basit bir şey eksik

? ya da orada soruna neden olan Owin.Security.Google Kütüphane içinde bir şey kötü oluyor?

cevap

14

Sadece bu deneyin

var googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions 
     { 
      ClientId = "MYCLIENTID", 
      ClientSecret = "MYSECRET", 
     }; 
app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions); 

Bu Ben basitlik için Kimlik Kimlik Doğrulama ile ASP.NET MVC 5 şablon varsayılan kullanıyorum, ancak umarım bu farklı kullanım durumları için değiştirilebilir

+2

'u aldıktan sonra ek bir adımdır. Bu, facebook kimlik doğrulamayla ilgili sorunu giderir. Google kullandığımda, sitemde aşağıdaki bağlantıya gitmeye çalışır: geri arama 'https .../signin-google' Geri arama yolunu nasıl kuracağınızı biliyor musunuz? Orijinal yazımda vardı callbackPath kullandığınızda, aynı sorun özgün sorumu olarak oluşur. İstemci Kimliği, Google + 'da ExternalLoginCallback işlevimi gösterecek şekilde ayarlanmıştır, ancak aslında iade edilmez. –

+14

Sadece takip etmek için, bu yöntemin kullanılması otomatik olarak adreste bulunan signin-google isteğini kullanıyor gibi görünüyor. Bunu düzeltmek için yaptığım şey, google konsolundaki google geri arama konumumu değiştirmek için bu adrese işaret etmekti. Ayrıca, RouteConfig dosyamda 'route.MapRoute ( name:" signin-google ", url:" signin-google ", varsayılanlar: rotam ekledim: new {controller =" Account ", action =" ExternalLoginCallback "} ); ' Yardımınız için teşekkürler @ suhas-joshi –

+0

@Brad: Üzgünüz, yeterince cevap veremedi ama bu sorunun cevabını gördüğümüze memnun oldum –

18

benim için çalıştı.

StartupAuth.cs

yönlendirme yolunu özelleştirmek vermeyin. Bunun yerine/signin-google tarafından değiştirilir ve bu etrafında alma girişimleri "sessiz" (hata ayıklayıcı değil) Internal Server 500 hataları neden oldu.

app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() 
{ 
    ClientId = "whatevs.apps.googleusercontent.com", 
    ClientSecret = "whatevs_secrut", 
    Provider = new GoogleOAuth2AuthenticationProvider() 
}); 

sizin APIs & auth>Credentials>Redirect URIs bölümünde https://console.developers.google.com/ için http://whatever.com/signin-google eklemek için emin olun.

RouteConfig.cs

senin yolları için kalıcı yönlendirme denetleyicisi eylemine bir rota ekleyin. Kalıcı yönlendirmeler, burada yeterli olacak tek şeydir. Doğrudan Geri Arama URL’si doğrudan yönlendirmek için yeterli değildir.

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     name: "Google API Sign-in", 
     url: "signin-google", 
     defaults: new { controller = "Account", action = "ExternalLoginCallbackRedirect" } 
    ); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 

AccountController.cs

Daimi yerleşik geri arama yöntemine yönlendirme ve ince olmalıdır. @Ronen yorumlarda söylediği gibi https://github.com/Pritchard/Test-AspNetGoogleOAuth2Authentication

+0

Belki de neden ihtiyacımız var? ernalLoginCallbackRedirect' hiç? Neden 'ExternalLoginCallback' doğrudan yol yapılandırmasında kullanılmamalıdır? –

+0

@MichalHosala Tahminimce bunu yapmak mümkündür. Bu soru, bu yılın Şubat ayından itibaren, ve şu anda bağlamı hatırlamak için gerekli olan çalışmalara dahil değilim.Görevi gerçekleştirmek için daha basit bir yol varsa, bunun için gidelim! –

+0

Yanıt için teşekkürler, ancak, eğer 'ExternalLoginCallback' kullanırsam, şaşırtıcı bir şekilde, çalışmayı durdurur ve giriş yaptıktan sonra' ExternalLoginCallback' içine yönlendirilmem ... Yani kodunuz doğru görünüyor, sadece bir fikir değil Bu fazladan adımlara ihtiyacımız var :) –

3

, bu bağlantı MVC5 Google OAuth ile sorunları çözmek gerekir:

http://blogs.msdn.com/b/webdev/archive/2014/07/02/changes-to-google-oauth-2-0-and-updates-in-google-middleware-for-3-0-0-rc-release.aspx

[AllowAnonymous] 
public ActionResult ExternalLoginCallbackRedirect(string returnUrl) 
{ 
    return RedirectPermanent("/Account/ExternalLoginCallback"); 
} 

Şablon proje başvuru için GitHub'dan yayınlanan olmuştur

Ayrıca, OWIN paketlerini NuGet'ten güncelleyin. Bu benim kod bakar ve büyük nasıl çalıştığını geçerli:

 var googleOptions = new GoogleOAuth2AuthenticationOptions() 
     { 
      ClientId = "xxxxxxxxxx", 
      ClientSecret = "xxxxxxxxxx", 
      CallbackPath = new PathString("/signin-google") 
     }; 
     googleOptions.Scope.Add("email"); 

     app.UseGoogleAuthentication(googleOptions); 
12

ayrıca geliştirici konsolunda Google+ API etkin olduğundan emin olun. İstemciniz ve sırrınız

+1

Bu benim için düzeltildi, ta! Ne yazık ki, bu Microsoft'un herhangi bir yolunda hiç bahsedilmiyor ... –

İlgili konular