Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C使用OAuth验证应用程序#_C#_Oauth - Fatal编程技术网

C# 从C使用OAuth验证应用程序#

C# 从C使用OAuth验证应用程序#,c#,oauth,C#,Oauth,我正在编写一个可以与Salesforce对话的应用程序。Salesforce通过OAuth提供对API的访问。我一直在尝试完成描述的OAuth身份验证过程。目前,我正在尝试授权我的应用程序。我有以下代码 // Ask Salesforce for a request token var request = (HttpWebRequest)(WebRequest.Create(String.Format("https://login.salesforce.com/services/oauth2/a

我正在编写一个可以与Salesforce对话的应用程序。Salesforce通过OAuth提供对API的访问。我一直在尝试完成描述的OAuth身份验证过程。目前,我正在尝试授权我的应用程序。我有以下代码

// Ask Salesforce for a request token
var request = (HttpWebRequest)(WebRequest.Create(String.Format("https://login.salesforce.com/services/oauth2/authorize?response_type=code&client_id={0}&redirect_uri=http://localhost:5004/home/AuthCallback", CONSUMER_KEY)));
request.Method = "POST";
request.ContentType = "application/json";

// Retrieve the request token from the response
var response = (HttpWebResponse)(request.GetResponse());
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
  string accessCodeData = accessCodeReader.ReadToEnd();
}
当用户单击我的ASP.NET MVC视图中的按钮时,会触发此代码。执行时,此代码调用Salesforce。我在fiddler中看到一个请求。请求标头如下所示:

POST /services/oauth2/authorize?response_type=code&client_id={consumerKey}&redirect_uri=http://localhost:5004/home/AuthCallback HTTP/1.1
事实上,我正在传递我的消费者密钥,我只是将其从示例中删除。无论如何,此请求返回一个302,主体大小为0。我可能误解了什么。但是,我希望得到一个请求令牌。然后我将使用请求令牌来获取访问令牌


我做错了什么?

您误用了API

仔细查看他们页面上的序列图(在获取访问令牌下):在auhorization_代码流中,您应该将浏览器重定向到他们的页面,以便用户看到登录页面,提供他/她的凭据,然后您获得令牌。相反,您正试图使用来自服务器的web请求发布到那里

然后,此特定流属于被动流组,此组用于浏览器应用程序,您的服务器将浏览器重定向到其服务器,您基本上获得对
redirect\u uri
参数中传递的uri的响应,这应指向您服务器上的应用程序

还有其他流,其中一个流适用于非浏览器应用程序,称为资源所有者密码流。在这个流程中,是您的应用程序托管登录UI,您将用户名/密码发送到授权服务器,然后您将获得令牌。但是,无论是否支持此流程,都需要在其文档中读取

请在此处阅读更多信息:

看看我是如何使用DotNetOpenAuth库处理到Google的OAuth2流的。这是一个直接的解决方案,将其应用于任何其他提供商都应该很简单