2015-02-24 9 views
8

Açık kaynak projemde bir OWIN paketi yükseltmesi hata ayıklaması yaşıyorum. Kısa açıklama, v2.1'den yükseltme yaptığımda yeni v3 sürümünde harici oturum açmaların kullanılmasının ve hata ayıklama işleminde farklı olanı anlayamıyorum. Kodumun hiçbirinin değiştirilmediğini, sadece OWIN bileşenlerini (Microsoft.Owin ve diğer alt ad alanlarındaki paketler) güncelleştirdiğimi unutmayın.OWIN'i 2.1'den 3.0.1'e yükseltme harici kimlik doğrulaması

Bu form yazı ile başlar:

<form action="/Forums/Authorization/ExternalLogin?ReturnUrl=http%3A%2F%2Flocalhost%3A1973%2FForums" method="post"><input name="__RequestVerificationToken" type="hidden" value="--verificationtoken--" />  <h2>External Logins</h2> 
    <p> 
    <button type="submit" id="Google" name="provider" value="Google" class="btn btn-primary">Google</button> 
    </p> 
</form> 

Bu yönteme nakleder: https://github.com/POPWorldMedia/POPForums/blob/v13.0.0/PopForums/Controllers/AuthorizationController.cs

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult ExternalLogin(string provider, string returnUrl) 
{ 
    return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Authorization", new { loginProvider = provider, ReturnUrl = returnUrl, area = "PopForums" })); 
} 

geri arama toprakları burada: ikinci satır bu çağrıları

public async Task<ActionResult> ExternalLoginCallback(string loginProvider, string returnUrl) 
{ 
    var authentication = _owinContext.Authentication; 
    var authResult = await _externalAuthentication.GetAuthenticationResult(authentication); 
    if (authResult == null) 
     return RedirectToAction("Login", "Account", new { error = Resources.ExpiredLogin }); 
... 

O : https://github.com/POPWorldMedia/POPForums/blob/v13.0.0/PopForums/ExternalLogin/ExternalAuthentication.cs

public async Task<ExternalAuthenticationResult> GetAuthenticationResult(IAuthenticationManager authenticationManager) 
{ 
    var authResult = await authenticationManager.AuthenticateAsync(ExternalCookieName); 
    if (authResult == null) 
     return null; 
... 

AuthenticationManager vb paketleri Google, Facebook, içinde IAuthenticationManager uygulamalarının herhangi biri olabilir. Sorun, hepsinin başarısız olması ve boş bir nesne döndürmesidir, bu nedenle uygulama kullanıcıya giriş yapamaz. , Yönetici olarak https://github.com/POPWorldMedia/POPForums/wiki/Documentation

  • harici girişler sayfasını seçin ve biri için kimlik bilgilerini ekleyin: talimatlara göre lokal https://github.com/POPWorldMedia/POPForums.git
  • çalıştır uygulaması:

    • Klon V13 dalı:

      yeniden oluşturmak için sağlayıcılar ve kutuyu işaretleyin.

    • Çıkış yaptıktan sonra yeni sağlayıcıyla giriş yapmak için düğmeyi kullanın.
    • Başarısızlığı izleyin ve yukarıdaki ExternalAuthentication GetAuthenticationResult yönteminin authResult yönteminin boş olduğunu görün.

    Anlamadığım OWIN yapılandırmasında bir şey değişip değişmediğini merak ediyorum. Kayıt için, işte bu: https://github.com/POPWorldMedia/POPForums/blob/v13.0.0/PopForums/Configuration/PopForumsOwinStartup.cs

    using System; 
    using Microsoft.Owin.Security; 
    using Microsoft.Owin.Security.Cookies; 
    using Owin; 
    using PopForums.ExternalLogin; 
    using PopForums.Services; 
    using PopForums.Web; 
    
    namespace PopForums.Configuration 
    { 
        public class PopForumsOwinStartup 
        { 
         public void Configuration(IAppBuilder app) 
         { 
          var setupService = PopForumsActivation.ServiceLocator.GetInstance<ISetupService>(); 
          if (!setupService.IsDatabaseSetup()) 
           return; 
    
          var settings = PopForumsActivation.ServiceLocator.GetInstance<ISettingsManager>().Current; 
    
          app.SetDefaultSignInAsAuthenticationType(ExternalAuthentication.ExternalCookieName); 
    
          app.UseCookieAuthentication(new CookieAuthenticationOptions 
          { 
           AuthenticationType = ExternalAuthentication.ExternalCookieName, 
           AuthenticationMode = AuthenticationMode.Passive, 
           CookieName = CookieAuthenticationDefaults.CookiePrefix + ExternalAuthentication.ExternalCookieName, 
           ExpireTimeSpan = TimeSpan.FromMinutes(60) 
          }); 
    
          if (settings.UseTwitterLogin) 
           app.UseTwitterAuthentication(
            consumerKey: settings.TwitterConsumerKey, 
            consumerSecret: settings.TwitterConsumerSecret); 
    
          if (settings.UseMicrosoftLogin) 
           app.UseMicrosoftAccountAuthentication(
            clientId: settings.MicrosoftClientID, 
            clientSecret: settings.MicrosoftClientSecret); 
    
          if (settings.UseFacebookLogin) 
           app.UseFacebookAuthentication(
            appId: settings.FacebookAppID, 
            appSecret: settings.FacebookAppSecret); 
    
          if (settings.UseGoogleLogin) 
           app.UseGoogleAuthentication(settings.GoogleClientId, settings.GoogleClientSecret); 
         } 
        } 
    } 
    

    Herhangi bir fikir?

  • +0

    Bu soruna yönelik çözümü bulmayı nasıl başardınız? Ben aynı sürümde yaşıyorum ben 3.0.1 –

    +0

    sürümü Burada sevinç yok. Kaynağa bakıp karşılaştırmak için zamanım olmadı. –

    cevap

    2

    Bu yardımcı olacağından emin değil, ancak şablonlara bakarsanız, OAuth geri aramalarında sonucu almak için AuthenticationManager.ExternalLinkLoginInfoAsync() öğesini kullanın. Ayrıca, başlangıç ​​kodunuzun varsayılan şablonlardan biraz farklı olduğunu görebiliyor ve görebiliyor musunuz? Bkz.

    Sen kullandığınız:

    : Hızlı bir şekilde şablonları bloguma mesajların birinin bu özette kullandığımız karşılaştırabilirsiniz

    app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 
    

    : Varsayılan şablonları kullanmak

    app.SetDefaultSignInAsAuthenticationType(ExternalAuthentication.ExternalCookieName); 
    

    http://weblog.west-wind.com/posts/2015/Apr/29/Adding-minimal-OWIN-Identity-Authentication-to-an-Existing-ASPNET-MVC-Application#MinimalCodeSummary

    Bu broşu duymaktan çok sinir bozucu Ancak sizin için ke - bu şeyler geriye dönük olarak uyumlu olmalıdır - bu gibi bir çekirdek sistem bileşenini kullanarak mevcut kodu kırmak iyi değil.

    +0

    Bu arada, Microsoft Owin 3.0.0 ve 3.0.1 arasında bir kırılma OAuth değişikliği yaptı. 3.0.0, muhtemelen 2.x ile uyumluydu, ancak daha sonra bir bilet biçiminde "bir hatayı düzeltdiler" ... Bkz: http://stackoverflow.com/questions/30074563/old-tokens-stopped-working-after -updating-Owin-den-3-0-0-için-3-0-1 – vkelman