मैं एमवीसी 5 ओविन लॉगिन के लिए दावा सीखने की कोशिश कर रहा हूं। मैंने इसे यथासंभव सरल रखने की कोशिश की। मैंने एमवीसी टेम्पलेट के साथ शुरुआत की और मेरे दावे कोड डाले (नीचे देखें)। जब मैं दृश्य में @ Html.AntiForgeryToken() सहायक का उपयोग करता हूं तो मुझे एक त्रुटि मिलती है।दावों और एंटीफॉर्गेरी टोकन के साथ एमवीसी 5 ओविन लॉगिन। क्या मुझे दावा दावेदार प्रदाता याद आती है?
त्रुटि:
A claim of type 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier' or
'http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovid
er' was not present on the provided ClaimsIdentity.
To enable anti-forgery token support with claims-based authentication, please verify that
the configured claims provider is providing both of these claims on the ClaimsIdentity
instances it generates. If the configured claims provider instead uses a different claim
type as a unique identifier, it can be configured by setting the static property
AntiForgeryConfig.UniqueClaimTypeIdentifier.
Exception Details: System.InvalidOperationException: A claim of type
'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier' or
'http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider' was
not present on the provided ClaimsIdentity. To enable anti-forgery token
support with claims-based authentication, please verify that the configured claims provider
is providing both of these claims on the ClaimsIdentity instances it generates.
If the configured claims provider instead uses a different claim type as a unique
identifier, it can be configured by setting the static property
AntiForgeryConfig.UniqueClaimTypeIdentifier.
Source Error:
Line 4: using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new
{ id = "logoutForm", @class = "navbar-right" }))
Line 5: {
Line 6: @Html.AntiForgeryToken()
पोस्ट लॉग इन कार्रवाई
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, "Brock"),
new Claim(ClaimTypes.Email, "[email protected]")
};
var id = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
var ctx = Request.GetOwinContext();
var authenticationManager = ctx.Authentication;
authenticationManager.SignIn(id);
return RedirectToAction("Welcome");
}
_LoginPartial.cshtml
@using Microsoft.AspNet.Identity
@if (Request.IsAuthenticated)
{
using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
{
@Html.AntiForgeryToken()
<ul class="nav navbar-nav navbar-right">
<li>
@Html.ActionLink("Hello " + User.Identity.GetUserName() + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })
</li>
<li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li>
</ul>
}
}
मैं tryed है सेटिंग ClaimTypes.NameIdentifier
(like in this SO answer)
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
}
और फिर मैं "केवल?" इस त्रुटि
A claim of type 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier' was
not present on the provided ClaimsIdentity.
मैं antiforgeryToken रखने के लिए, क्योंकि यह क्रॉस-साइट स्क्रिप्टिंग के खिलाफ मदद कर सकते हैं चाहते।
मुझे नहीं पता कि मानचित्रण क्या करता है। सबसे पहले मैंने 'NameIdentifier' भी डाला लेकिन मुझे एक ही त्रुटि मिली। फिर मैंने यह जानने के बिना Global.asax.cs में जोड़ने का प्रयास किया, लेकिन अब यह काम करता है। शायद यह आपके मैपिंग जैसा ही है? ग्लोबल.एएसएक्स सीएस .: एंटीफोर्गेरी कॉनफिग। यूनिकक्लेम टाइप टाइप इंडेंटिफ़ायर = दावा टाइप्स नाम; एंटीफोर्गेरीकोनफिग। यूनिकक्लेम टाइप टाइप इंडेंटिफ़ायर = दावा टाइप्स.ईमेल; एंटीफोर्गेरीकोनफिग। यूनिकक्लेम टाइप टाइप इंडेंटिफ़ायर = दावा टाइप्स.NameIdentifier; – radbyx