मुझे उम्मीद है कि कोई इस समस्या से मेरी मदद कर सकता है - यह मुझे पागल कर रहा है! :)एमवीसी 5 ओविन - बाहरी प्रमाणीकरण (QQ कनेक्ट) पर प्रमाणीकृत है
मैं QQ कनेक्ट (OAuth 2.0) के माध्यम से बाहरी लॉगिन का उपयोग करने के लिए tinysnake के QQ प्रदाता से कनेक्ट का उपयोग कर कोशिश कर रहा हूँ: https://github.com/tinysnake/microsoft-owin-security-qq
सब कुछ महान जा रहा किया जा रहा है - मैं अपने QQ खाते के माध्यम से प्रवेश कर सकते हैं और मैं उपयुक्त दावों आदि के साथ मेरी बाहरी लॉजिक कॉलबैक-विधि पर वापस पोस्ट किया गया मैं इन मानों का उपयोग IAuthenticationManager के माध्यम से उपयोगकर्ता पर हस्ताक्षर करने के लिए करता हूं - सब ठीक हो जाता है। हालांकि - जब मैं उपयोगकर्ता को किसी अन्य पृष्ठ पर रीडायरेक्ट करता हूं और चेक करता है कि वह लॉग इन है - तो मुझे ISA प्रमाणीकृत मान से एक गलत मान मिलता है ... और मैं पहले सेट किए गए किसी भी दाव को नहीं पढ़ सकता।
यह आसानी से ठीक कर सकता है - लेकिन मैं सिर्फ यह अभी नहीं देख सकते हैं :)
कुछ कोड:
authconfig:
public static void ConfigureAuthentication(IAppBuilder app)
{
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
// Normal cookie sign in
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
AuthenticationMode = AuthenticationMode.Active
});
// QQ CONNECT
app.UseQQConnectAuthentication(
appId: "XXXXXX",
appSecret: "XXXXXXXXXXXXXXXXX");
}
AccountController:
//
// POST: /Account/ExternalLogin
[System.Web.Mvc.HttpPost]
[System.Web.Mvc.AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult ExternalLogin(string provider, string returnUrl)
{
// Request a redirect to the external login provider
return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl }));
}
//
// GET: /Account/ExternalLoginCallback
[System.Web.Mvc.AllowAnonymous]
[HostAuthentication(DefaultAuthenticationTypes.ExternalCookie)]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var ctx = Request.GetOwinContext();
var result = ctx.Authentication.AuthenticateAsync(DefaultAuthenticationTypes.ExternalCookie).Result;
var claims = result.Identity.Claims.ToList();
var name = claims.First(i => i.Type == "urn:qqconnect:name");
claims.Add(new Claim(ClaimTypes.AuthenticationMethod, "QQ"));
claims.Add(new Claim(ClaimTypes.Name, name.Value));
var ci = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ExternalCookie);
ctx.Authentication.SignIn(ci);
// DO OTHER STUFF HERE
return Redirect("~/");
}
सभी अब तक अच्छी तरह से जा रहा है ... लगता है
HomeController:
public ActionResult Index()
{
var model = new HomeViewModel();
var ctx = Request.GetOwinContext();
if (ctx.Authentication.User.Identity.IsAuthenticated) // <-- THIS RETURNS FALSE
{
var claimsIdentity = User.Identity as ClaimsIdentity;
model.Name = claimsIdentity.FindFirst(ClaimTypes.Name).Value;
model.IsAuthenticated = true;
}
return View(model);
}
जब मैं ctx.Authentication.User.Identity.IsAuthenticated जाँच, मैं एक झूठी मूल्य मिलता है ... और मैं किसी भी दावे को पुनः प्राप्त नहीं कर सकता हूं।
क्या मुझे कुछ याद आ रही है?
किसी भी मदद की बहुत सराहना की जाएगी :)
अद्यतन
मैं अपने AccountController में ऐसा करने से काम कर रहे मेरे कोड है:
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var ctx = Request.GetOwinContext();
var result = ctx.Authentication.AuthenticateAsync(DefaultAuthenticationTypes.ExternalCookie).Result;
if (result.Identity.IsAuthenticated)
{
// Signed in successfully
var claims = result.Identity.Claims.ToList();
var name = claims.First(i => i.Type == "urn:qqconnect:name");
//claims.Add(new Claim(ClaimTypes.AuthenticationMethod, "QQ"));
claims.Add(new Claim(ClaimTypes.Name, name.Value));
var id = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
var authenticationManager = ctx.Authentication;
authenticationManager.SignIn(id);
}
return Redirect("~/");
}
लेकिन जिस तरह से मैं इसे देख - यहाँ मैं मैं एप्लिकेशनक्यूकी का उपयोग कर रहा हूं और साइन इन करने के लिए बाहरी कुकी नहीं ... या क्या मैं पूरी तरह से कुछ खो रहा हूं? यह समाधान मेरे लिए काम करता है - लेकिन मुझे यह जानना है कि यह करने का यह सही तरीका है या नहीं?
इस के साथ समान समस्याएं होने पर, यदि कोई स्पष्टीकरण दे सकता है। – cchamberlain