【问题标题】:Is it possible to forward the current user's FormsAuthentication Identity to another Controller action?是否可以将当前用户的 FormsAuthentication Identity 转发到另一个控制器操作?
【发布时间】:2009-08-07 12:39:43
【问题描述】:

我想使用 ASP.NET MVC 的视图作为邮件模板引擎。为此,我使用 System.ComponentModel.Component.WebClient 从另一个控制器操作调用一个控制器操作,解析返回的网页并通过电子邮件发送。

在这种情况下,是否可以将当前用户的登录凭据(我正在使用 FormsAuthentication)转发到 WebClient 请求的控制器操作?用户密码是加密的,所以我不能只用他的用户名和密码创建一个新的 NetworkCredentials 实例。

【问题讨论】:

    标签: asp.net asp.net-mvc authentication forms-authentication


    【解决方案1】:

    是的,您可以将 .ASPXAUTH cookie 从您当前的 Request 对象复制到 WebClient

    编辑:我自己实际上并没有尝试过,因此出于安全原因,可能从 Request 对象中删除了 .ASPXAUTH cookie。

    但由于您可以访问机器密钥,因此您可以即时创建自己的 cookie。这是应该做的代码(我找不到我实际做的项目)

    var ticket = new FormsAuthenticationTicket(User.Identity.Name, true, 5);
    string aspxAuthCookieValue = FormsAuthentication.Encrypt(ticket);
    

    此代码为您当前的用户名创建一个表单身份验证 cookie,有效期为 5 分钟。

    【讨论】:

    • 听起来不错,我想出了设置 cookie 的 webclient 部分,但是如何读取 .ASPXAUTH?出于某种原因,即使我已登录,以下术语也是正确的:requestContext.HttpContext.Response.Cookies[".ASPXAUTH"].Value.Length==0
    • 我在回答中添加了一种解决方法
    • 再次阅读您的评论:您应该查看 HttpContext.REQUEST 而不是 RESPONSE !
    • 是的,你是对的。感谢您的提示,抱歉混淆了!
    【解决方案2】:

    您不是在寻找类似“rendering a view to a string”的东西,而不是执行 http 请求

    【讨论】:

    • 这也是我首先尝试的方法,但经过大量谷歌搜索并尝试了不同的方法(这些方法都不适用于 ASP.NET MVC 1.0 final),我选择了一个 webclient。性能在这里不是问题,所以我并不关心开销。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    相关资源
    最近更新 更多