【问题标题】:C# basic pre-emptive authenticationC# 基本的抢先式身份验证
【发布时间】:2018-02-22 11:01:52
【问题描述】:

我需要使用需要基本先发制人身份验证的 Web 服务。我有以下代码,但响应时出错 -

'远程服务器返回错误:(403) Forbidden.'

用户凭据正确。有什么想法有什么问题吗?

string url = "MYURL";
HttpWebRequest req = HttpWebRequest.Create(url) as HttpWebRequest;

string user = "USER";
string pwd = "PASSWORD";


string auth = "Basic " + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(user + ":" + pwd));
req.PreAuthenticate = true;
req.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested;
req.Headers.Add("Authorization", auth);
WebResponse resp = req.GetResponse();
resp.Close();

req = HttpWebRequest.Create(url) as HttpWebRequest;
req.PreAuthenticate = true;
req.Credentials = new NetworkCredential(user, pwd);
resp.Close();

【问题讨论】:

  • 您有文档吗?身份验证/授权有多种形式,你怎么知道它使用的是Basic?现代服务倾向于使用令牌授权。
  • 文档说:对于 REST (jSON),将使用基本身份验证。此标头将包含 WS-Security 信息。

标签: c# rest web-services preemptive


【解决方案1】:

401 是您在无法通过身份验证时收到的错误代码(即不清楚您是谁)。如果您收到403,这意味着服务器知道您是谁,但仍然认为您不应该被允许访问。

我想您应该与向您提供凭据的人交谈并询问他。

【讨论】:

  • Web 服务所有者确认用户凭据是正确的并且我们可以访问,但注意到我在 REST 的情况下应该使用抢先式身份验证,这是我实际尝试做的。我们还可以选择使用 SOAP。什么对新手来说更容易?
  • 您是否使用 Fiddler 之类的工具检查您发送了正确的标头?您的代码很奇怪,也许发布minimal reproducible example 会有所帮助。您的部分代码应该可以工作,但很难判断您实际在运行哪些部分。
猜你喜欢
  • 2011-10-24
  • 2014-08-29
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多