我使用以下代码使用Gmail帐户从我的Web应用程序发送邮件.我的问题是,我可以将发件人地址更改为原始发件人(gmail)地址以外的其他地址吗?我的代码如下:
System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
System.Net.NetworkCredential cred = new System.Net.NetworkCredential("sample@gmail.com", "*******");
Run Code Online (Sandbox Code Playgroud)
无论我做什么都没用,因为我总是收到邮件sample@gmail.com.是否有可能改变它?
我已经改为
mail.From = new System.Net.Mail.MailAddress("sample@yahoo.com");但是我收到了来自发件人地址的邮件,sample@gmail.com而不是来自新的"发件人"地址.我认为gmail smtp用原始凭证覆盖起始地址.
所以我一直在使用DotNetOpenAuth一段时间,今天我需要添加对提供程序的支持,迫使我发送带有基本身份验证的密钥(我一直在使用旧版本,只有Post参数)
我试过用ClientCredentialApplicator.NetworkCredential,它没用.然后根据这里的建议,我已经做了我自己的ClientCredentialApplicator.
我仍然没有工作,我把断点放进去ApplyClientCredential,他们从来没有打过.
我升级到最新版本(4.3.0.0),应该有这个修复.
一切正常,但没有Authorization标题,远程服务器回答301错误(这让我认为它与提交相同的问题 - 授权信息未添加到请求,直到服务器回答Unauthorized和我正在使用的提供程序当没有Authorization标题时回答301
c# basic-authentication dotnetopenauth networkcredentials oauth-2.0
我使用以下代码从互联网获取html数据:
WebProxy p = new WebProxy("localproxyIP:8080", true);
p.Credentials = new NetworkCredential("domain\\user", "password");
WebRequest.DefaultWebProxy = p;
WebClient client = new WebClient();
string downloadString = client.DownloadString("http://www.google.com");
Run Code Online (Sandbox Code Playgroud)
但出现以下错误:"需要代理身份验证".我无法使用默认代理,因为我的代码是在没有默认代理设置的特殊帐户下从Windows服务运行的.所以,我想在我的代码中指定所有代理设置.请告诉我如何解决此错误.
我想针对域控制器验证一组凭据.例如:
Username: joel
Password: splotchy
Domain: STACKOVERFLOW
Run Code Online (Sandbox Code Playgroud)
在.NET 3.5及更高版本中,您可以使用PrincipalContext.ValidateCredentials(username, password).
否则你就麻烦了.
按照Microsoft知识库文章如何验证Microsoft操作系统上的用户凭据中的代码,我到达您调用的位置AcceptSecurityContext:
ss = AcceptSecurityContext(
@pAS._hcred, //[in]CredHandle structure
phContext, //[in,out]CtxtHandle structure
@InBuffDesc, //[in]SecBufferDesc structure
0, //[in]context requirement flags
SECURITY_NATIVE_DREP, //[in]target data representation
@pAS._hctxt, //[in,out]CtxtHandle strcture
@OutBuffDesc, //[in,out]SecBufferDesc structure
ContextAttributes, //[out]Context attribute flags
@Lifetime); //[out]Timestamp struture
Run Code Online (Sandbox Code Playgroud)
除了函数失败:
SEC_E_NO_AUTHENTICATING_AUTHORITY(0x80090311)功能失败了.无法联系任何权限进行身份验证.这可能是由于以下条件:
- 身份验证方的域名不正确.
- 该域名不可用.
- 信任关系失败了.
这将是一个有用的错误,除了我可以使用以下方法从.NET 3.5验证相同的凭据:
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, domain))
{
valid = context.ValidateCredentials(username, password);
}
Run Code Online (Sandbox Code Playgroud)
可能发生什么允许.NET验证一组凭据,而本机代码不能?
更新:LogonUser也失败了:
LogonUser("joel@stackoverflow.com", …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用NetworkCredential类通过ASP.NET访问网页.但是我继续通过以下消息获得异常System.Security.Cryptography.CryptographicException: The handle is invalid
下面是关于我如何调用该函数的代码.任何帮助是极大的赞赏.
C#:
System.Net.WebClient client = new System.Net.WebClient();
client.Credentials = new System.Net.NetworkCredential("Admin", "Nimda");
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪
[CryptographicException: The handle is invalid.
]
System.Security.SecureString.ProtectMemory() +154
System.Security.SecureString.InitializeSecureString(Char* value, Int32 length) +170
System.Security.SecureString..ctor(Char* value, Int32 length) +65
System.Net.SecureStringHelper.CreateSecureString(String plainString) +6181188
System.Net.NetworkCredential..ctor(String userName, String password) +64
Run Code Online (Sandbox Code Playgroud) c# asp.net webclient cryptographicexception networkcredentials
我的C#app点击使用NTLM身份验证的Web服务器.
我发现每个向服务器发出的请求(使用新的HttpWebRequest)都是单独验证的.换句话说,每个请求都会产生401响应,然后在我获得实际响应之前发生NTLM握手会话.
例如:
第一个GET请求:
-> GET xyz
<- 401 error (WWW-Authenticate:NTLM)
-> GET xyz (Authorization:NTLM base64stuff)
<- 401 error (WWW-Authenticate:NTLM base64stuff)
-> GET xyz (Authorization: base64stuff)
<- 200
Run Code Online (Sandbox Code Playgroud)
后续要求:
-> GET xyz (Authorization:NTLM base64stuff)
<- 401 error (WWW-Authenticate:NTLM) //can this request be avoided?
-> GET xyz (Authorization: base64stuff)
<- 200
Run Code Online (Sandbox Code Playgroud)
(最初,在PreAuthenticate设置为false的情况下,后续请求看起来像第一个请求 - 即每个'请求'有三个基础请求)
有没有办法通过后续的HttpWebRequests"共享"第一次请求对服务器执行的身份验证?
我想也许该UnsafeAuthenticatedConnectionSharing属性允许我这样做,但是对于应用程序中使用的所有HttpWebRequest对象将其设置为true都没有效果.
但是,如果我设置PreAuthenticate为true,则在第一个请求之后,每个请求会发生少于401的响应.
我正在尝试在c#中创建一个程序,允许我连接到我的TFS以创建新的工作项.
NetworkCredential netCred = new NetworkCredential(
"username",
"password");
BasicAuthCredential basicCred = new BasicAuthCredential(netCred);
TfsClientCredentials tfsCred = new TfsClientCredentials(basicCred);
tfsCred.AllowInteractive = false;
TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(
new Uri("https://example.visualstudio.com/DefaultCollection"),tfsCred);
tpc.Authenticate();
Run Code Online (Sandbox Code Playgroud)
在我尝试连接到TFS的那一刻,我正在使用我自己的Live用户名和密码,它给出了错误消息"TF30063:您未经授权".我不确定与TFS建立连接的不同方法.
我相信正确的方法是使用服务凭据,但目前我无法锻炼如何找到服务凭据我不知道如何在TFS中找到我的服务凭据.
如果给定一个特定的url,我有一个获取id和xpath的方法.如何通过请求传递用户名和密码,以便我可以抓取需要用户名和密码的网址?
using HtmlAgilityPack;
_web = new HtmlWeb();
internal Dictionary<string, string> GetidsAndXPaths(string url)
{
var webidsAndXPaths = new Dictionary<string, string>();
var doc = _web.Load(url);
var nodes = doc.DocumentNode.SelectNodes("//*[@id]");
if (nodes == null) return webidsAndXPaths;
// code to get all the xpaths and ids
Run Code Online (Sandbox Code Playgroud)
我应该使用Web请求获取页面源,然后将该文件传递给上面的方法吗?
var wc = new WebClient();
wc.Credentials = new NetworkCredential("UserName", "Password");
wc.DownloadFile("http://somewebsite.com/page.aspx", @"C:\localfile.html");
Run Code Online (Sandbox Code Playgroud) 是否可以将 NetworkCredentials(或变体)转换为 PSCredential?
我想透明地使用当前用户的凭据,但不想提示他们。
我正在尝试使用HttpWebRequest请求需要 Windows 身份验证的 url ,我正在使用
request.Credential = New NetworkCredential("username", "password");
Run Code Online (Sandbox Code Playgroud)
一切正常,直到我决定不硬记录用户名和密码,然后切换到
request.Credential = CredentialCache.DefaultNetworkCredentials;
Run Code Online (Sandbox Code Playgroud)
然后我得到了 401 未经身份验证的错误。我检查了我的用户
WindowsIdentity.GetCurrent();
Run Code Online (Sandbox Code Playgroud)
它正确返回我的用户名,但是
CredentialCache.DefaultNetworkCredentials;
Run Code Online (Sandbox Code Playgroud)
返回我的用户名、域的空字符串...几乎所有内容都是空字符串.. 太糟糕了HttpWebRequest.Credential期待ICredential意味着我无法将WindowsIdentity.GetCurrent()设置为它。
无论如何,我可以将我当前的登录用户传递给HttpWebRequest.Credential吗?
是CredentialCache.DefaultNetworkCredentials; 正确的方法?或者我只是缺少一些设置?
我已经阅读了一些像这样的文章 http://msdn.microsoft.com/en-us/library/ms998351.aspx。
它要么太长太复杂,我无法理解,要么不起作用。我是新手,希望在这里得到一些直接的答案。