2011-02-04 3 views
1

Я пытаюсь использовать Oauth для подключения к salesforce из приложения .NET. Я использую DotNetOpenAuth на данный момент, и мне не повезло. Я могу получить твиттер/google и т. Д., Чтобы нормально работать, но когда я создаю новую потребительскую услугу для Salesforce, это просто дает мне ошибку (400/Bad Request)Salesforce DotNetOpenAuth/Oauth Проблемы с удаленным доступом

Я использую InMemoryTokenManager, но прежде, чем я получу крик на, позвольте мне повторить итерацию, что твиттер и другие работают отлично. Я намерен заменить менеджера inmemorytoken внедрением базы данных, но пока я просто хочу заставить его работать.

Странная вещь, если я вручную создать URL - https://login.salesforce.com/services/oauth2/authorize?response_type=code & client_id = [CONSUMER_KEY] & redirect_uri = [REDIRECT_URL] и введите его в браузере. Я нахожусь на странице Salesforce, чтобы авторизовать приложение для доступа к моей учетной записи - тот, который я ожидаю увидеть, должен все работать.

Ожидается ли такое поведение? Это похоже на дыру в безопасности, но, может быть, я не понимаю все правильно.

Любые идеи, в которых я ошибаюсь?

ConsumerCode - (ну, важная часть, по крайней мере)

public static readonly ServiceProviderDescription ServiceDescription = new ServiceProviderDescription 
{ 
    RequestTokenEndpoint = 
     new MessageReceivingEndpoint(
     "https://login.salesforce.com/services/oauth2/authorize", 
     HttpDeliveryMethods.GetRequest | 
     HttpDeliveryMethods.AuthorizationHeaderRequest), 
    UserAuthorizationEndpoint = 
     new MessageReceivingEndpoint(
     "https://login.salesforce.com/services/oauth2/authorize", 
     HttpDeliveryMethods.GetRequest | 
     HttpDeliveryMethods.AuthorizationHeaderRequest), 
    AccessTokenEndpoint = 
     new MessageReceivingEndpoint(
     "https://login.salesforce.com/services/oauth2/token", 
     HttpDeliveryMethods.GetRequest | 
     HttpDeliveryMethods.AuthorizationHeaderRequest), 
    TamperProtectionElements = 
    new ITamperProtectionChannelBindingElement[] { 
    new HmacSha1SigningBindingElement() }, 
}; 

OAuthController.cs

if (this.SFTokenManager != null) 
{ 
    var SF = new WebConsumer(SFConsumer.ServiceDescription, this.SFTokenManager); 
    // Is Twitter calling back with authorization? 
    var accessTokenResponse = SF.ProcessUserAuthorization(); 
    if (accessTokenResponse != null) 
    { 
     this.SFAccessToken = accessTokenResponse.AccessToken; 
    } 
    else if (this.SFAccessToken == null) 
    { 
     // If we don't yet have access, immediately request it. 
     SF.Channel.Send(SF.PrepareRequestUserAuthorization());      
    } 
    return View("SFIn"); 
} 
else 
{ 
    return View("SFOut"); 
} 

Линия я получаю мои 400 на это

// If we don't yet have access, immediately request it. 
SF.Channel.Send(SF.PrepareRequestUserAuthorization()); 
+0

Это звучит, как вы, возможно, с помощью клиента OAuth1 но вызова oauth2 конечных точек. – superfell

ответ

2

DotNetOpenAuth говорит, что его Поддержка oAuth 1.0 & 1.0a, в то время как вы пытаетесь получить доступ к oAuth 2.0 службы в salesforce, 2 протокола несовместимы.

+1

oAuth2 довольно прост, вы можете использовать его напрямую, не требуя какого-либо инструментария. – superfell

+0

Спасибо superfell, однако я также попробовал оконечные точки oAuth 1.0 и получил тот же ответ - 400/bad request. Что-то происходит неправильно задолго до того, как неправильный протокол начинает вызывать проблемы. – roryok

+0

Я был отложен этим сообщением [http://www.rumbleware.com/blog/2009/10/authenticating-salesforce-com-apps-using-oauth/], который рекомендовал использовать библиотеку, хотя это тоже кажется следует ссылаться на OAuth1.0, который кажется более сложным – roryok

1

Я ничего не знаю о SalesForce, но из вашего сообщения похоже, что SalesForce использует OAuth 2.0. Но вы используете функцию OAuth 1.0 (a) DotNetOpenAuth, которая объясняет, почему она терпит неудачу.

Вы можете попробовать использовать OAuth 2.0 CTP version of DotNetOpenAuth и использовать новый API для OAuth 2.0, чтобы узнать, помогает ли это.

Смежные вопросы