有没有办法告诉我的代码以不同的用户身份运行?
我通过PInvoke调用NetUserSetInfo,我需要将其称为不同的用户.有没有办法做到这一点?
我正在尝试使用.net中的WebRequest类向网页发出请求.我尝试阅读的网址需要Windows身份验证,因此我会收到未经授权的异常.如何将Windows凭据传递给此请求以便进行身份验证.
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create( "http://myapp/home.aspx" );
request.Method = "GET";
request.UseDefaultCredentials = false;
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential( "username", "password", "domain" );
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Raises Unauthorized Exception
this.Response.Write( response.StatusCode );
Run Code Online (Sandbox Code Playgroud)
上面的代码返回以下错误.
System.Net.WebException: The remote server returned an error: (401) Unauthorized.
Run Code Online (Sandbox Code Playgroud)
检查异常细节时,我注意到一件事是我尝试访问的URL是重定向到另一个提示我提供NT登录详细信息的URL.我相信凭据也应该转发到此URL.但显然它没有发生.
我正在使用jQuery来调用.Net Web服务,如下所示:
var service_url = "https://example.com/myservice.asmx"
$.ajax({
type: "GET",
url: service_url,
dataType: "xml",
data: "ParamId=" + FormId.value,
processData: false,
error: function(XMLHttpRequest, textStatus, errorThrown) { ajaxError(XMLHttpRequest, textStatus, errorThrown); },
success: function(xml) { DoSomething(xml); }
});
Run Code Online (Sandbox Code Playgroud)
现在我想在Windows身份验证中包装" https://example.com/myservice.asmx ".如何使用jQuery/javascript将凭据传递给服务?
理想情况下,我想使用当前用户的凭据,但如果需要,我可以为所有服务调用使用1个主凭证.
我正在使用Forms身份验证.
在Windows身份验证中获取我使用的PC的用户名: User.Identity.Name
我也需要在Forms身份验证中使用此信息,但User.Identity.Name不起作用.
如何在不使用Windows身份验证的情况下获取User.Identity.Name?
我已经阅读了关于这个主题的几个问题,比如这里,这里,这里和这里 ; 但在我的案例中没有一个提供了有效的解决方案.
我想做的事:
为仅由我们自己的员工使用的Web应用程序实施Windows身份验证.这样他们就不需要登录应用程序,但已经通过登录Windows进行身份验证.
此外,我需要根据用户可能分配到的Active Directory安全组来限制应用程序的某些区域.
所以我希望能够装饰Controllers/Actions
[Authorize(Roles="SomeRole")]
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
我有
<authentication mode="Windows" />
Run Code Online (Sandbox Code Playgroud)
在我的web.config中.我<roleManager>在上面链接的一些帖子中添加了几个a的排列.目前我有这个角色经理
<roleManager defaultProvider="WindowsProvider"
enabled="true"
cacheRolesInCookie="false">
<providers>
<add
name="WindowsProvider"
type="System.Web.Security.WindowsTokenRoleProvider" />
</providers>
</roleManager>
Run Code Online (Sandbox Code Playgroud)
在这篇文章中找到.
事实上,如果我装饰一个控制器[Authorize],我可以很好地访问它.
然而:
我可以在网络上的用户设置中看到,我是名为"IT"的AD安全组的成员.但是,如果我装饰相同的控制器,[Authorize(Roles="IT")]我得到的是由asp.net开发服务器为未授权的401服务的空白屏幕. 这是出乎意料的. 我认为我应该能够查看页面,因为我登录到Windows并且是"IT"组的一部分.
我在这个主题上发现的大部分内容都让我觉得很难完成我想要做的事情,但我在这里显然遗漏了一些东西.
我希望我的桌面Java应用程序能够与Active Directory用户进行单点登录.分两步,我想:
使用Java:确定当前Windows用户的程序方法我可以获得当前Windows用户的名称,但我可以依赖它吗?我觉得
System.getProperty("user.name")
Run Code Online (Sandbox Code Playgroud)
会不够安全?("user.name"似乎来自环境变量,所以我不能依赖它,我想?)
问题在Linux上使用Java对Active Directory进行 身份验证为我提供了给定名称+ pass的身份验证,但我想根据Windows登录进行身份验证?
对于Active Directory访问,LDAP可能是选择?
我不完全确定我是否提出了正确的问题,但希望有人有一些想法可以转发我.
我正在尝试访问Windows身份验证背后的服务.我以为我可以通过HTTP基本身份验证凭据传递的方式传递凭据,但它不起作用.当我执行以下操作时,出现401错误,我绝对确定密码是否正确.
curl --user username:password http://example.com
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
这里很神秘.我有一个使用Windows身份验证的ASP.NET MVC 4 Web应用程序,该应用程序已维护超过18个月而没有问题.最近,它被部署到一个新的站点,我遇到了以下非常奇怪的行为.
我正在使用jQuery 1.8.2 $.ajax调用POST数据到服务器端点来更新数据.除了在一个页面上,AJAX POST触发新的NTLM协商之外,这个工作正常.Chrome,IE和Firefox也出现了同样的问题.虽然所有浏览器的问题都是相同的,但它的表现方式略有不同:
核心问题似乎是Connection: keep-alive头部没有与有问题的AJAX请求一起发送,但在其他情况下.但是,底层JavaScript代码几乎完全相同,并且AJAX调用在开发环境中正常运行,该环境也设置为使用Windows身份验证.
此外,尝试Connection在beforeSend回调中设置请求标头无效.
任何关于问题根源的见解,或者两种AJAX POST之间存在差异的方法都是最受欢迎的.
工作代码和请求标头
$.ajax({
url: url,
type: "POST",
data: $("#myForm").serialize(),
cache: false,
success: function (response) {
}
});
Accept:*/*
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:621
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Host:www.xxx.yyy.zzz
Origin:http://www.xxx.yyy.zzz
Referer:http://www.xxx.yyy.zzz/app/resource/path
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36
X-Requested-With:XMLHttpRequest
Run Code Online (Sandbox Code Playgroud)
失败的代码和请求标头
$.ajax({
url: url,
type: "POST",
data: data,
cache: false,
success: function (data, status, xhr) {
} …Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的(asmx)Web服务,它返回一个DataSet.我已经使用Data - > From Web按钮将webservice添加到我的Excel 2007工作簿中,并且我能够查看/刷新数据.
当我需要保护Web服务时出现问题:我已经为Web服务启用了Windows身份验证,并且请求使用了SSL.
遗憾的是,在尝试刷新数据时,Excel不会使用用户登录的Windows凭据 - 刷新失败.
如果我单击数据 - >连接 - >属性 - >定义 - >编辑查询,只有我提示我的Windows凭据然后刷新然后成功....对我来说不是问题,但不是我想要的每一个这个电子表格的用户必须做...任何想法如何在尝试刷新而不是让它失败时出现提示?
谢谢!!
到目前为止,更新答案与SharePoint和Excel Services(两者都没有任何用处)...以及一个链接"以下过程不适用于从文本文件或Web查询中检索的数据 "...我只是想在桌面计算机上安装excel副本的人能够从受密码保护的Web服务进行更新......微软真是太难了吗?
另一个更新仍然没有接受答案 - 因为到目前为止没有答案提供了一个有效的解决方案(虽然很好的谷歌搜索 - 谢谢你们;-))
我正在研究客户端 - 服务器应用程序,我希望客户端使用用户的登录凭据向服务器验证自身,但我不希望用户必须输入他们的用户名和密码.我当然不想负责安全处理密码.我只需要用户向我证明他们是他们所说的人,然后我的服务器就可以继续执行并随意授予/拒绝命令.
我的用户是域的一部分,因此我希望能够使用他们登录时创建的登录凭据.
我没有使用任何类型的Web服务,也不想使用.我控制客户端和服务器软件,两者都是用纯C#编写的,并使用好的插槽来完成工作.
我更喜欢用纯C#/ .Net来做这件事,但我愿意使用不安全的C#和pinvokes到win32 API,如果这意味着我将完成工作.
我已经在Windows中阅读了一些关于SSPI的内容,但是我在黑暗中有点感觉,因为这种应用程序开发对我来说是新的.
有人知道怎么做这个吗?SSPI是这样的吗?如何在C#中使用SSPI?是否有.Net原生方式,以便我的代码可以保持可移植性?
c# ×4
asp.net-mvc ×2
jquery ×2
.net ×1
ajax ×1
asp.net ×1
curl ×1
excel ×1
iis ×1
java ×1
sspi ×1
web-services ×1
webrequest ×1