मैंने एक वेब एप्लिकेशन बनाया है। जब मैं इसे बनाया मैं टिक 'संगठनात्मक खाते'लॉगिन ईवेंट कैप्चर करना ताकि मैं अन्य उपयोगकर्ता जानकारी कैश कर सकूं
यह अच्छी तरह से काम करता है - मैं अपने Office 365 खाते के साथ प्रवेश और User.Identity.Name
ईमेल पता
इस आवेदन एक स्थानापन्न के सामने एक बड़ी एएसपी क्लासिक अनुप्रयोग के लिए खत्म होता है। ऐप में एक मौजूदा सुरक्षा तालिका है जिसका उपयोग करने की आवश्यकता है।
मैं पाने के लिए इस तालिका में एक रिकॉर्ड को देखने के लिए ईमेल पते का उपयोग करना चाहते हैं
उपयोगकर्ता (तो मैं डेटाबेस कॉल में उपयोग कर सकते हैं)
के लिए आंतरिक डाटाबेस कुंजी सुरक्षा स्तर (प्राधिकरण) उपयोगकर्ता
मैं इस जैसे ही मैंने प्रमाणीकृत कर रहा हूँ ऊपर देखो और Session
का उल्लेख करने के लिए इन दो मानों को बचाने के लिए चाहते हैं के लिए बाद में
मेरे पास एक मौजूदा विधि है जो यह सभी लुकअप और कैशिंग करता है। मुझे वास्तव में यह _LoginPartial.cshtml
दृश्य से कॉल करके काम कर रहा है लेकिन स्पष्ट रूप से यह देखने के लिए गलत है कि इस तरह की चीज़ को
देखने के लिए कोड यहां क्लिक करें और उपयोगकर्ता जानकारी कैश करें। अभी के लिए इस AccountController.cs
में है, लेकिन यह
private Boolean GetAdditionalUserInfo()
{
// if authentication info is saved, don't go find it
if (Session["UID"] != null) return true;
// get the db employee id from the database and save it to the session
var r = (
from e in db.Employees
where e.Email == User.Identity.Name
select new
{
e.Emp_ID,
e.Group_ID
}
).SingleOrDefault();
if ((r == null) || (r.Group_ID == (int)Role.Inactive))
{
// couldn't find record or inactive
return false;
}
// Update last login datetime
Employee ell = db.Employees.Find(r.Emp_ID);
ell.LastLogin = DateTime.Now;
db.SaveChangesAsync();
// Save user details to the session
Session["UID"] = r.Emp_ID;
// TBD: Investigate "CLAIMS" - this should probably be a claim
Session["Role"] = r.Group_ID;
return true;
}
मुझे लगता है कि User.Identity.Name
के संदर्भ में प्रवेश प्रक्रिया से चलाता है तो मैं या तो बस कोशिश करते हैं और स्टार्टअप पर यह कह सकते हैं (मैं सही पता नहीं है हो सकता है की जरूरत नहीं है ऐसा करने का तरीका), या मुझे लगता है कि OnAuthentication
विधि का उपयोग करके इसे कॉल करना उचित है और इसे लिंक करने के लिए मुझे अपने फ़ंक्शन का नाम OnAuthenticated
संपत्ति पर पास करना चाहिए। यहाँ विधि और संपत्ति को दो लिंक है:
https://msdn.microsoft.com/en-us/library/system.web.mvc.controller.onauthentication(v=vs.118).aspx
लेकिन मैं कहना है कि OO प्रोग्रामिंग मेरी बात नहीं है है और मैं इन पृष्ठों से बाहर काम नहीं कर सकता उनके उपयोग का तरीका या किस वर्ग में उन्हें डाल दिया।
यह page का तात्पर्य है कि इसे Startup.Auth.cs
में जाना होगा लेकिन मेरा Startup.Auth.cs
ऐसा कुछ नहीं दिखता है। यहां मेरे अधिकांश Startup.Auth.cs
हैं जो ज्यादातर शुरुआत में 'संगठनात्मक' चुनते थे। (एक तरफ ध्यान दें पर, app.UseKentorOwinCookieSaver();
मेरी अगली चुनौती क्योंकि जाहिरा तौर पर संगठनात्मक लॉगिन Session
साथ काम नहीं करता आप विश्वास कर सकते है !!!)
किसी को भी मुझे GetAdditionalUserInfo()
कॉल करने के लिए आवश्यक कोड जोड़ने में मदद कर सकते हैं? लॉगिन के बाद? या वैकल्पिक रूप से पुष्टि करें कि मैं इसे स्टार्टअप पर बस कॉल कर सकता हूं, और इसे करने का सही तरीका सुझा सकता हूं।
public partial class Startup
{
private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
private static string tenantId = ConfigurationManager.AppSettings["ida:TenantId"];
private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];
//private static string authority = aadInstance + tenantId;
// to make this multi tenant, use common endpoint, not the tenant specific endpoint
private static string authority = aadInstance + "common";
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(
CookieAuthenticationDefaults.AuthenticationType);
// https://stackoverflow.com/questions/20737578/asp-net-sessionid-owin-cookies-do-not-send-to-browser
app.UseKentorOwinCookieSaver();
app.UseCookieAuthentication(
new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
TokenValidationParameters = new TokenValidationParameters
{
// If you don't add this, you get IDX10205
// from here http://charliedigital.com/2015/03/14/adding-support-for-azure-ad-login-o365-to-mvc-apps/
ValidateIssuer = false
},
Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = ctx =>
{
bool isAjaxRequest = (ctx.Request.Headers != null && ctx.Request.Headers["X-Requested-With"] == "XMLHttpRequest");
if (isAjaxRequest)
{
ctx.Response.Headers.Remove("Set-Cookie");
ctx.State = NotificationResultState.HandledResponse;
}
return System.Threading.Tasks.Task.FromResult(0);
}
}
});
}
}
कैसे उपयोगकर्ता प्रमाणीकृत हो जाता है आज? क्या आपके लिए 'ओपन ओपन कनेक्ट कनेक्ट प्रमाणीकरण' काम करता है? –
हां। प्रमाणीकरण ठीक काम करता है। मुझे नहीं पता कि OnAthenticated का उपयोग कैसे करें। मैंने इन कोड नमूने को देखा है लेकिन वे मेरे कोड के समान नहीं हैं, और स्वत: पूर्ण यह नहीं दिखाता है कि ऑन प्रमाणीकृत किसी भी हिस्से में मान्य है। यहां मिले कोड नमूने यहां दिए गए हैं: http://stackoverflow.com/questions/19758485/how-to-pass-information-from-onauthenticated-event-to-a-controller-and-signin http://stackoverflow.com/ प्रश्न/19456008/कैसे करते हैं-ए-पहुँच-माइक्रोसॉफ्ट-Owin-सुरक्षा-xyz-onauthenticated-संदर्भ addclaims-VA/19530628 # 19530628। मैं अधिक जानकारी के साथ प्रश्न भी संपादित करूंगा –