2016-08-03 7 views
11

जोड़ने पर खाता/एक्सेस पर आधारित रीडायरेक्ट करता है, मैंने एक ऐसे मुद्दे पर ठोकर खाई है जहां असंगत रूप से एप्लिकेशन उपयोगकर्ता को वर्तमान लॉग इन उपयोगकर्ता को सोशल मीडिया प्रमाणीकरण जोड़ने पर Account/AccessDenied/ पर रीडायरेक्ट करता है। ऐसा लगता है कि उपयोगकर्ता पहली बार लॉग इन करता है, फिर एक और प्रमाणीकरण विधि जोड़ने की कोशिश करके यह उपयोगकर्ता को Account/AccessDenied?ReturnUrl=%2Fmanage%2Flinklogincallback पर वापस कर देता है।ऐप ओएथ

मेरा अनुमान है कि [प्राधिकरण] विशेषता के साथ कुछ गलत हो रहा है, लेकिन दूसरी बार जब मैं बाहरी प्रमाणीकरण विधि जोड़ने का प्रयास करता हूं।

ManageController

[Authorize] 
public class ManageController : Controller 
{ 
    // 
    // POST: /Manage/LinkLogin 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public IActionResult LinkLogin(string provider) 
    { 
     // Request a redirect to the external login provider to link a login for the current user 
     var redirectUrl = Url.Action("LinkLoginCallback", "Manage"); 
     var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl, _userManager.GetUserId(User)); 
     return Challenge(properties, provider); 
    } 

    // 
    // GET: /Manage/LinkLoginCallback 
    [HttpGet] 
    public async Task<ActionResult> LinkLoginCallback() 
    { 
     var user = await GetCurrentUserAsync(); 
     if (user == null) 
     { 
      return View("Error"); 
     } 
     var info = await _signInManager.GetExternalLoginInfoAsync(await _userManager.GetUserIdAsync(user)); 
     if (info == null) 
     { 
      return RedirectToAction(nameof(ManageLogins), new { Message = ManageMessageId.Error }); 
     } 
     var result = await _userManager.AddLoginAsync(user, info); 
     var message = result.Succeeded ? ManageMessageId.AddLoginSuccess : ManageMessageId.Error; 
     return RedirectToAction(nameof(ManageLogins), new { Message = message }); 
    } 
} 

यह कैसे startup.cs व्यवस्थित किया जाता है के आदेश हो सकता है?

यह अनुरोध/प्रतिक्रिया

enter image description here

+0

क्या यह त्रुटि लगातार हो रही है? क्योंकि मुझे यह त्रुटि बहुत मिली है जब मेरा कोड अभी भी छोटी गाड़ी अपवाद फेंक रहा था। कुकीज को साफ़ करने से अस्थायी रूप से समस्या ठीक हो गई। बाद में जब मैंने अपनी छोटी सी चीजों को ठीक किया, तो यह पुनर्निर्देशित नहीं हुआ। –

+0

यह लगातार होता है, लेकिन मेरे पास कोई सुराग नहीं है कि यह सब कुछ है जैसा कि बाकी सब कुछ इरादे से काम करता है। यह आपके काम करने के लिए तय की गई छोटी सी छोटी चीजें क्या थीं? – Rovdjuret

+0

क्या आपने 'स्टार्टअप 'वर्ग की' कॉन्फ़िगर() 'विधि में' app.UseGoogle प्रमाणीकरण (...) 'जोड़ा है? –

उत्तर

3

aspnet सुरक्षा रेपो पर काम कर टीम यह एक बग (इस issue देखें) और अगली फिल्म जब तक हल हो गई है कि मैं इस बात की पुष्टि की है मिल गया है। एक अस्थायी समाधान जो आपके खाते में बाहरी लॉगिन जोड़ने पर बनाई गई है शून्य पर

Identity.External

नाम के एक कुकी, स्थापित करने के लिए है।

if (Request.Cookies["Identity.External"] != null) 
{ 
    Response.Cookies.Delete("Identity.External"); 
} 
+2

क्या आप कृपया जिथब मुद्दे पर लिंक पोस्ट कर सकते हैं? –

+0

लिंक के साथ अपडेट किया गया उत्तर, @GerardoGrignoli – Rovdjuret

+0

मैं भी समस्या का सामना कर रहा था, लेकिन जब मैं 1.1.0 तक अपग्रेड किया गया तो यह कामकाज के बिना भी काम करता है – Liero

6

@ रोवजर्जेट के कामकाज ने मुझे एएसपीनेट टीम द्वारा हल किए जाने तक मेरी सहायता की।

public IActionResult Login(string returnUrl = null) 
{ 
    if (_signInManager.IsSignedIn(User)) 
    { 
     // redirect to user profile page 
     return RedirectToAction(nameof(HomeFileController.Index), "HomeFile");     
    } 
    else 
    { 
     // clear Identity.External cookie 
     if (Request.Cookies["Identity.External"] != null) 
     { 
      Response.Cookies.Delete("Identity.External"); 
     } 
     return View(new LoginViewModel{ ReturnUrl = returnUrl, RememberMe = true }); 
    } 
} 

अपडेट:: यहाँ मेरी नियंत्रक लॉग कार्रवाई है नवीनतम संस्करण में (मई 2017 की) कुकीज़ उपसर्ग ".AspNetCore।"। तो कुकी का नाम "होना चाहिए .एएसपीनेट कॉर। इडेंटिटी। बाहरी"

5

मुझे भी एक ही समस्या का सामना करना पड़ा। मैं से here

 app.UseGoogleAuthentication(new GoogleOptions 
     { 
      AuthenticationScheme = "Google", 
      DisplayName = "Google", 
      SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme, 

      ClientId = "xxx.apps.googleusercontent.com", 
      ClientSecret = "xxxx-Xxxxxxx" 
     }); 

IdentityServer4 QuickStart नमूना से कोड उपयोग कर रहा था मैं इस मुद्दे को ठीक करने के लिए निम्न करने के लिए कोड बदलना पड़ा।

 var CookieScheme= app.ApplicationServices.GetRequiredService<IOptions<IdentityOptions>>().Value.Cookies.ExternalCookieAuthenticationScheme; 

     app.UseGoogleAuthentication(new GoogleOptions 
     { 
      AuthenticationScheme = "Google", 
      DisplayName = "Google", 
      SignInScheme = CookieScheme, 

      ClientId = "xxx.apps.googleusercontent.com", 
      ClientSecret = "xxxx-Xxxxxxx" 
     }); 
इसके बजाय सिर्फ IdentityServerConstants.ExternalAUthenticationScheme मैं एप्लिकेशन द्वारा उपयोग वर्तमान पहचान प्रणाली की कुकी विकल्पों में से बाहरी प्रमाणीकरण कुकी पहचान के लिए इस्तेमाल योजना प्राप्त करने के लिए किया था से लगातार 'बाह्य' का उपयोग करने का

। यही कारण है कि मेरे लिए मुद्दा तय किया।

+0

जानकारी के लिए धन्यवाद, जानना अच्छा है क्योंकि मैं अभी आईडीएस 4 लागू कर रहा हूं :) – Rovdjuret

3

वैकल्पिक हल मुझे मदद की जब तक यह asp.net टीम द्वारा हल हो जाए

// GET: /Account/AccessDenied 
    [HttpGet] 
    [AllowAnonymous] 
    public IActionResult AccessDenied(string returnUrl = null) 
    { 
     // workaround 
     if (Request.Cookies["Identity.External"] != null) 
     { 
      return RedirectToAction(nameof(ExternalLoginCallback), returnUrl); 
     } 
     return RedirectToAction(nameof(Login)); 

    } 
2

आप Startup.cs में config.SignIn.RequireConfirmedEmail = true निर्धारित किया है और EmailConfirmed क्षेत्र, बाह्य रूप में प्रमाणित उपयोगकर्ता (जैसे फेसबुक प्रवेश) के लिए false है बाद में लॉगिन पर हैं , आपको Account/AccessDenied/ एक्शन विधि पर निर्देशित किया जाएगा।

+0

मैंने 'ईमेल कॉन्फिगर' को 'सत्य' पर सेट किया है क्योंकि यह बाहरी लॉगिन के लिए समझ में आता है और इससे मदद नहीं मिलती है – Sergey

संबंधित मुद्दे