如何从控制台应用程序的ASP.NET MVC应用程序认证(How to authenticate i

2019-07-28 20:07发布

我有一个发送XML的MVC应用程序,并收到另一个XML作为响应控制台应用程序。 它完美的作品,但我想补充的授权(原因很明显)。

下面是从控制台应用程序的代码:

using (var wc = new WebClient())
{
    return GetXmlFromBytes(
        wc.UploadData("URL", GetBytesFromXml(xmlToSend))
    );
}

这里是从MVC应用程序的代码:

public ActionResult DoSomething()
{
    XElement xml = XElement.Load(new System.IO.StreamReader(Request.InputStream));
    var response = InsertDataFromXml(xml);
    return File(GenerateFileFromResponse, "text/xml", "result.xml");
}

和它的作品。 因此,要实现授权,我添加以下代码:

控制台(添加的wc.Credentials ):

using (var wc = new WebClient())
{
    wc.Credentials = new NetworkCredential("user", "password");
    return GetXmlFromBytes(
        wc.UploadData("URL", GetBytesFromXml(xmlToSend))
    );
}

(添加MVC应用[Authorize] ):

[Authorize]
public ActionResult DoSomething()
{
    XElement xml = XElement.Load(new System.IO.StreamReader(Request.InputStream));
    var response = InsertDataFromXml(xml);
    return File(GenerateFileFromResponse, "text/xml", "result.xml");
}

而且这是行不通的。 我不知道是否需要这些信息来解决这个问题,但我的web.config有以下项目:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication> 

事实上,在MVC应用程序发回的文件是登录页面的HTML!

我有什么做的,解决这个问题? 在任何参数中缺少NetworkCredentials ? 我知道它可以用一个实例化domain ,但我不知道什么是在MVC应用程序的用户的域。

而且,只是为了确保我放心“用户”和“密码”是有效的。

Answer 1:

你混凭据类型;

wc.Credentials = new NetworkCredential("user", "password");

是HTTP认证。

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication> 

是窗体身份验证。

这是完全不同的,不兼容。 在命令行应用程序中使用窗体身份验证是具有挑战性的,你需要去到登录页面的请求,POST用户名和密码,然后取身份验证cookie被返回并将其连接到随后的请求。



Answer 2:

您需要进行身份验证,首先为您使用窗体身份验证。

  1. 调用登录Web方法,并从HTTP响应捕捉验证的Cookie
  2. 设置验证Cookie的第二HTTP请求到DoSomething的方法

或者设置Auhentication模式=“窗口”,如果你是本地Intranet上!



Answer 3:

创建的AuthenticationService可以用来做窗体身份验证。 随着ClientBaseExtensions类,你可以得到的cookie你的WCF服务客户端。 注入这个cookie,其他电话...

String cookies = null;
var auth = new AuthenticationServiceClient();
using (new OperationContextScope(auth.InnerChannel))
{
    auth.Login("user", "password", null, true);
    cookies = auth.GetIncomingCookies();
}

现在cookie数据注入您的数据服务或您的HTTP调用。

见http://mytoolkit.codeplex.com/wikipage?title=ClientBaseExtensions



文章来源: How to authenticate in an ASP.NET MVC application from a console application