我正在编写一些代码来使用第三方组件,我需要提供一个在我开始使用它时实现ICredentials的对象.
如果我写以下内容......
var credential = new NetworkCredential("MyUsername", "MyPassword");
Run Code Online (Sandbox Code Playgroud)
...并通过"凭证",没关系.但我想传递当前用户的凭据(它是一个Windows服务,因此以指定用户身份运行).
我尝试了以下两种方法,但似乎都不起作用(或返回任何内容):
NetworkCredential credential = System.Net.CredentialCache.DefaultCredentials;
NetworkCredential credential = CredentialCache.DefaultNetworkCredentials;
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议如何获取approriate对象,该对象代表运行该服务的用户名的凭据?
谢谢,罗斯
当我需要向代理(本地或网络)提供凭证时,我应该使用哪一个?
这两者之间的确切区别是什么?
我们很难确定这些凭证对象的工作方式.事实上,他们可能无法按照我们期望的方式工作.这是对当前问题的解释.
我们有2台服务器需要通过webservices相互通信.第一个(让我们称之为Server01)有一个Windows服务作为NetworkService帐户运行.另一个Server02具有与IIS 6.0一起运行的ReportingServices.Windows Service on Server01正在尝试使用Server02ReportingServices WebService生成报告并通过电子邮件发送它们.
所以,这是我们到目前为止所做的尝试.
在运行时设置凭据(这完全正常):
rs.Credentials = new NetworkCredentials("user", "pass", "domain");
Run Code Online (Sandbox Code Playgroud)
现在,如果我们可以使用通用用户一切都没问题,但是......我们不被允许.因此,我们尝试使用DefaultCredetials或DefaultNetworkCredentials并将其传递给RS Webservice:
rs.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials
Run Code Online (Sandbox Code Playgroud)
要么:
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
Run Code Online (Sandbox Code Playgroud)
无论哪种方式都行不通.我们总是从IIS获得401 Unauthrorized.现在,我们知道如果我们想要访问记录为NetworkService的资源,我们需要将其授予DOMAIN\MachineName$(http://msdn.microsoft.com/en-us/library/ms998320.aspx):
授予对远程SQL Server的访问权限
如果要访问同一域(或受信任域)中的另一台服务器上的数据库,则使用网络服务帐户的网络凭据对数据库进行身份验证.网络服务帐户的凭据的格式为DomainName\AspNetServer $,其中DomainName是ASP.NET服务器的域,AspNetServer是您的Web服务器名称.
例如,如果ASP.NET应用程序在域CONTOSO中名为SVR1的服务器上运行,则SQL Server将看到CONTOSO\SVR1 $的数据库访问请求.
我们假设以相同的方式授予IIS访问权限.但事实并非如此.或者至少,没有正确设置某些内容以使其正确进行身份验证.
所以,这里有一些问题:
我们在某个地方读过"模仿用户",我们是否需要在Windows服务中的某处设置?
是否可以将对NetworkService内置帐户的访问权限授予远程IIS服务器?
谢谢阅读!
web-services credentials defaultnetworkcredentials reporting-services
我正在尝试访问同一域/同一个asp.net应用程序的网页,这是受密码保护的.对于发起此呼叫的网页和正在访问的网页,凭据都是相同的.
这是代码,我不知道为什么我总是以登录表单html代码结束?
using (WebClient client = new WebClient())
{
client.QueryString.Add("ID", "1040"); //add parameters
//client.Credentials = CredentialCache.DefaultCredentials;
//I tried to add credentials like this
client.Credentials = new NetworkCredential("username", "password");
string htmlCode = client.DownloadString("http://domain.loc/testpage.aspx");
}
Run Code Online (Sandbox Code Playgroud) “WebClient”类(还有 ClickOnce)可以使用默认代理设置(例如放入 application.config 中),但是:
\n\nhttp://msdn.microsoft.com/en-us/library/kd3cf2ex.aspx
\n\n<defaultProxy\nenabled="true|false"\nuseDefaultCredentials="true|false"\n<bypasslist> \xe2\x80\xa6 </bypasslist>\n<proxy> \xe2\x80\xa6 </proxy>\n<module> \xe2\x80\xa6 </module>\n/>\nRun Code Online (Sandbox Code Playgroud)\n\n附言。 我刚刚使用以下设置进行了测试,并确认用户名/密码并非来自成功登录的 IE 会话。
\n\n因此,悬而未决的问题是用户名/密码从哪里来?或者是否必须在自定义应用程序中以编程方式提供,在这种情况下 ClickOnce 会发生什么?(这似乎没有启动任何对话框来允许用户提供用户名/密码)
\n\n<?xml version="1.0" encoding="utf-8" ?>\n<configuration>\n <system.net>\n <defaultProxy enabled="true" useDefaultCredentials="false">\n <bypasslist>\n <add address="localhost" />\n </bypasslist>\n <proxy usesystemdefault="True" proxyaddress="http://proxy1.health.qld.gov.au:80/" bypassonlocal="False" />\n </defaultProxy>\n </system.net>\n</configuration>\n\n\n\nprivate void button2_Click(object sender, EventArgs e)\n{\n Cursor.Current = Cursors.WaitCursor;\n try\n {\n var wc = new WebClient();\n var str = wc.DownloadString(textBox1.Text);\n MessageBox.Show("String = " + str);\n } \n …Run Code Online (Sandbox Code Playgroud) .net ×3
credentials ×3
asp.net ×1
c# ×1
defaultproxy ×1
proxy ×1
web-services ×1
webclient ×1
winforms ×1