2014-11-28 1 views
2

저는 Salesforce와 대화 할 앱을 작성 중입니다. Salesforce는 OAuth를 통해 API에 대한 액세스를 제공합니다. 나는 here으로 묘사 된 OAuth 인증 프로세스를 시도하고있다. 현재 내 앱을 승인하려고 시도하고 있습니다. 다음 코드가 있습니다.C#에서 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에 호출됩니다. 나는 바이올린에 대한 요청을 봅니다. 요청 헤더는 다음과 같습니다.

POST /services/oauth2/authorize?response_type=code&client_id={consumerKey}&redirect_uri=http://localhost:5004/home/AuthCallback HTTP/1.1 

실제로 소비자 키를 전달하는 중입니다. 예제에서 제거하고 있습니다. 그럼에도 불구하고이 요청은 몸 크기가 0 인 302를 반환합니다. 나는 오해가있을 수 있습니다. 그러나, 나는 요청 토큰을 기대하고 있었다. 그런 다음 요청 토큰을 사용하여 액세스 토큰을 얻으려고했습니다.

내가 뭘 잘못하고 있니?

답변

3

API를 오용하고 있습니다.

는 (액세스 토큰을 얻기 아래) 자신의 페이지에서 시퀀스 다이어그램에 대해 자세히 살펴 다음 auhorization_code 당신이 로 가정되는 흐름을 자신의 페이지로 브라우저를 리디렉션 사용자가 로그인 페이지를 볼 수 있도록 제공하고 자신의/그녀의 증명서와 당신은 토큰을 돌려받습니다. 대신 서버에서 웹 요청을 사용하여 POST를 시도하고 있습니다.

이 특정 흐름이 그룹이 그룹은 브라우저 응용 프로그램에서 사용하고자하는 수동 흐름에 다음 속한 서버는 서버에 브라우저를 리디렉션 당신은 기본적으로 redirect_uri 매개 변수에 전달 된 URI에 대한 응답을 얻을 이것은 서버에서 응용 프로그램을 다시 가리켜 야합니다.

다른 흐름이 있습니다. 그 중 하나는 브라우저가 아닌 앱에 적합합니다. 리소스 소유자 비밀번호 흐름이라고합니다. 이 흐름에서 로그인 UI를 호스팅하는 응용 프로그램이며 인증 서버에 사용자 이름/암호를 보내면 토큰을 다시 가져옵니다. 그러나이 흐름이 지원되는지 여부는 문서에서 읽어야합니다.

더 여기 읽기 : http://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified

는 DotNetOpenAuth 라이브러리를 사용하여, 나는 구글에 OAuth2를 흐름을 처리하는 방법을 살펴 보자. 이것은 직접적인 해결책이며 다른 공급자에게도 적용해야합니다.

http://www.wiktorzychla.com/2014/11/simple-oauth2-federated-authentication.html