gpt4 book ai didi

asp.net - 如何从单独的 .NET 应用程序获取当前上下文或用户身份?

转载 作者:行者123 更新时间:2023-12-02 18:43:39 31 4
gpt4 key购买 nike

背景

我正在开发从旧版 ASP.NET 表单应用程序到 MVC 4 应用程序的迭代迁移。

此迁移是分阶段进行的,一次一个部分,因此有必要同时运行旧的和新的 MVC 应用程序。对于某些部分,用户将被引导至新应用程序,而对于尚未迁移的部分,用户将被引导回(或保留)旧应用程序。

在服务器上,应用程序的结构如下:

LEGACY (.NET 2.0 forms app)--
|--Api (new MVC 4 WebAPI)
|--V2 (new MVC 4)

因此,在旧版上对 foo 页面的调用是 /foo.aspx,在 V2 上是 /V2/foo

所有内容均采用 C# 编写,但请注意旧版应用程序在 .NET 2.0 上运行,而 V2 应用程序在 .NET 4.5 上运行。我不确定这是否重要,但认为值得注意。

问题

我无法在应用程序之间成功共享用户/身份验证状态。显然,如果用户登录旧版应用程序,当调用 V2 页面时,我需要在 V2 应用程序上获取他们的身份验证 cookie(或采取类似的操作),以便用户不会再次提示登录。

我尝试过的

我在两个 web.config 文件中设置了相同的 authenticationmachinekey 元素:

  <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;
}

但我不知道它是否有效,因为旧版应用程序与我的 V2 应用程序不在同一解决方案中,因此当我调试 V2 应用程序时,我没有办法通过旧版应用程序登录并模拟在旧版和 V2 之间跳转的实际用户体验。

我也刚刚尝试将其添加到我的 HomeController 中,希望相同的机器 key 能为我带来一些魔力:

 ViewBag.UserName = User.Identity.Name;

显然,我随后将 ViewBag.UserName 绑定(bind)到 View 中的 html 元素,但这似乎也不起作用。

最佳答案

在父应用程序上设置 machineKey CompatibilityMode="Framework20SP2"。

.net 4.5 无法读取 4.0(或更低版本)的身份验证 token

http://technet.microsoft.com/en-us/subscriptions/index/system.web.configuration.machinekeycompatibilitymode

http://blogs.msdn.com/b/webdev/archive/2012/10/23/cryptographic-improvements-in-asp-net-4-5-pt-2.aspx

关于asp.net - 如何从单独的 .NET 应用程序获取当前上下文或用户身份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15526630/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com