身份框架身份验证请求
本文关键字:请求 身份验证 框架 身份 | 更新日期: 2023-09-27 18:03:21
我正在做一个项目,建立一个爬行我们内部网页的网络蜘蛛。安全性是使用身份框架构建的。使用以下代码可以轻松地访问未受保护的页面:
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。请求,然后我通过调试器看到请求已经过身份验证。我如何使用这个请求对象来获得一个新的受保护的页面来解析?我肯定我错过了一个非常简单的方法。
我还在为此挣扎。也许我该换个方式问。我从同一个web应用程序调用一个页面。从调用控制器返回true,这很好:
HttpContext.Current.User.Identity.IsAuthenticated
但是通过调试器并在接收控制器中检查这个,现在这是假的,这很糟糕:
HttpContext.Current.User.Identity.IsAuthenticated
如何让接收控制器被认证?
这实际上取决于您在服务器端实现的身份验证方法。Asp.net Identity本质上是一个成员系统。
例如,如果它使用承载身份验证令牌,那么您需要在正在发送的请求的授权头中设置承载身份验证令牌。我宁愿建议使用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你可以在这里看到怎么做并附加它当你请求获得安全页面时,你需要这样做
看起来权限是基于角色的。检查您登录的用户是否有权限访问当用户被重定向到该页面时被击中的控制器方法。
如果方法的Attribute参数指定了点击所需用户的角色,则登录用户应该具有访问该页的权限。
由于您正在进行身份验证,可能是授权问题。用户可能没有足够的权限来访问该页。