पृष्ठभूमि
मैं एक विरासत एएसपी.NET फॉर्म ऐप से एक एमवीसी 4 ऐप में एक पुनरावृत्ति माइग्रेशन विकसित कर रहा हूं।मैं वर्तमान संदर्भ या उपयोगकर्ता पहचान को एक अलग .NET एप्लिकेशन से कैसे प्राप्त करूं?
यह माइग्रेशन एक समय में एक सेक्शन में हो रहा है, इसलिए विरासत और नए एमवीसी दोनों अनुप्रयोगों को एक साथ चलाने के लिए आवश्यक है। कुछ वर्गों के लिए, उपयोगकर्ता को नए एप्लिकेशन पर निर्देशित किया जाता है, और उन वर्गों के लिए जिन्हें अभी तक माइग्रेट नहीं किया गया है, उपयोगकर्ता को लीगेसी एप्लिकेशन पर वापस (या चालू) निर्देशित किया जाता है।
सर्वर पर, अनुप्रयोगों इस तरह संरचित कर रहे:
LEGACY (.NET 2.0 forms app)--
|--Api (new MVC 4 WebAPI)
|--V2 (new MVC 4)
तो विरासत पर foo
पेज के लिए एक कॉल /foo.aspx
है और V2 पर यह /V2/foo
है।
सबकुछ सी # में है, लेकिन कृपया ध्यान दें कि विरासत ऐप .NET 2.0 पर चल रहा है और वी 2 ऐप .NET 4.5 पर चल रहा है। मुझे यकीन नहीं है कि यह मायने रखता है, लेकिन सोचा कि यह ध्यान रखना महत्वपूर्ण होगा।
मैं सफलतापूर्वक अनुप्रयोगों के बीच उपयोगकर्ता/प्रमाणीकरण राज्य साझा नहीं कर सकते समस्या। जाहिर है, यदि उपयोगकर्ता विरासत ऐप पर लॉग इन करता है, तो मुझे वी 2 ऐप पर अपनी ऑथ कुकी (या इसी तरह की कार्रवाई करने) की आवश्यकता होती है जब एक वी 2 पेज कॉल किया जाता है ताकि उपयोगकर्ता को लॉग इन करने के लिए फिर से संकेत नहीं दिया जा सके।
मैं
मैं दोनों web.config फ़ाइलों में समान authentication
और machinekey
तत्वों की स्थापना की है क्या प्रयास किया है:
<authentication mode="Forms">
<forms cookieless="UseCookies" defaultUrl="~/someUrl" loginUrl="/" path="/" protection="All" timeout="240" enableCrossAppRedirects ="true" domain="someDomain.com" requireSSL="false" />
</authentication>
<machineKey validationKey="DE78CF63226. . .788658D142AB881" decryptionKey="0B97E8BA4C4EB4B4C524. . .54E4622E14168D2D5C84461FA2" validation="SHA1" decryption="AES" />
मैं V2 आवेदन की Global.asax में इस कोड की कोशिश की है:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies[cookieName];
if (authCookie == null)
{
return;
}
FormsAuthenticationTicket authTicket = null;
try
{
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
}
catch
{
return;
}
if (authTicket == null)
{
return;
}
string[] roles = authTicket.UserData.Split(new char[] { '|' });
var id = new FormsIdentity(authTicket);
var principal = new GenericPrincipal(id, roles);
//Thread.CurrentPrincipal = principal;
Context.User = principal;
}
लेकिन मुझे नहीं पता कि यह काम करता है या नहीं, क्योंकि विरासत ऐप मेरे वी 2 ऐप के समान समाधान में नहीं है और इसलिए जब मैं वी 2 ऐप डीबग करता हूं, तो मेरे पास लॉग इन करने का कोई तरीका नहीं है विरासत ऐप और विरासत और वी 2 के बीच hopping के वास्तविक उपयोगकर्ता अनुभव अनुकरण।
मैं भी बस उम्मीद है कि समान मशीन कुंजी मेरे लिए कुछ जादू काम करेगा में मेरी HomeController
को यह जोड़ने की कोशिश की है: जाहिर है
ViewBag.UserName = User.Identity.Name;
, मैं तो ध्यान में रखते हुए किसी HTML तत्व पर ViewBag.UserName
बाध्य है, लेकिन यह या तो काम नहीं लग रहा है।
यह एक चीज थी जो वास्तव में मेरी स्थिति के लिए काम करती थी! –