身份框架认证的蜘蛛请求

时间:2016-08-19 21:24:27

标签: c# asp.net-identity owin

我正在开发一个项目来构建一个抓取我们内部网页的网络蜘蛛。使用Identity Framework构建安全性。使用此代码可以轻松完成未受保护的页面:

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://www.yoursite.com/resource/file.htm");

using (StreamWriter streamWriter = new StreamWriter(webRequest.GetRequestStream(), Encoding.UTF8))
{
    streamWriter.Write(requestData);
}

string responseData = string.Empty;
HttpWebResponse httpResponse = (HttpWebResponse)webRequest.GetResponse();
using (StreamReader responseReader = new StreamReader(httpResponse.GetResponseStream()))
{
    responseData = responseReader.ReadToEnd();
}

但是这段代码并没有使用OWIN身份验证,因此当它访问受保护的页面时,它无法访问它。

如果我已登录并尝试HttpContext.Request,那么我会通过调试器看到Request已经过身份验证。如何使用此请求对象获取要解析的新受保护页面?我确信,我错过了一种非常简单的方法。

更新 我仍在努力解决这个问题。也许我应该问另一种方式。我正在从同一个Web应用程序调用一个页面。从调用控制器返回true,这是好的:

HttpContext.Current.User.Identity.IsAuthenticated

但是通过调试器并在接收控制器中检查它,现在这是错误的,这很糟糕:

HttpContext.Current.User.Identity.IsAuthenticated

如何让接收控制器进行身份验证?

2 个答案:

答案 0 :(得分:0)

这实际上取决于您在服务器端使用的实现身份验证方法。 Asp.net Identity本质上是一个会员系统。

例如,如果它正在使用承载认证令牌,那么您需要在要发送的请求的Authorization标头中设置承载认证令牌。我宁愿建议将HttpClient用于这些目的。

正如你提到的OWIN,我假设这是一个不记名的令牌场景。

var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Oauth token");

更新

如果您以后使用Asp.net MVC的默认项目模板和Asp.net Identity作为附加依赖项,您可以在此处连接如下所示的httpClient:

class Program
{
    static void Main()
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://yourapp");
            var content = new FormUrlEncodedContent(new[] 
            {
                // Push your stuff here, your username, password fields 
                // as you coded in your server
                new KeyValuePair<string, string>("", "login")
            });
            var result = client.PostAsync("login", content).Result;
            string resultContent = result.Content.ReadAsStringAsync().Result;
            Console.WriteLine(resultContent);
        }
    }
}

你当然需要保存身份验证cookie,你可以看到如何here并在你获取安全页面的请求时附加它,你必须做{{3}之类的事情}

答案 1 :(得分:0)

看起来权限基于角色。在用户被重定向到该页面时,检查您登录的用户是否具有访问控制器方法的权限。

如果您具有指定用户所需角色的方法的属性参数,则登录用户应具有访问该页面的权限。

正在进行身份验证可能是授权问题。用户可能没有足够的权限来访问该页面。