Salesforce DotNetOpenAuth / Oauth远程访问问题

时间:2011-02-04 13:11:04

标签: oauth dotnetopenauth salesforce

我正在尝试使用Oauth从.NET应用程序连接到salesforce。我现在正在使用DotNetOpenAuth,没有运气。我可以让twitter / google等工作正常,但是当我为Salesforce创建一个新的消费者服务时,它只是给我一个错误(400 /错误请求)

我正在使用InMemoryTokenManager,但在我开始大喊之前,让我重新尝试一下twitter等人的工作方式。我的意图是用数据库实现替换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());   

3 个答案:

答案 0 :(得分:2)

DotNetOpenAuth表示其oAuth支持率为1.0& 1.0a,当您尝试在salesforce上访问oAuth 2.0服务时,这2个协议不兼容。

答案 1 :(得分:1)

我对SalesForce一无所知,但从您的消息来看,SalesForce看起来像是使用OAuth 2.0。但是你正在使用DotNetOpenAuth的OAuth 1.0(a)功能,这可以解释它失败的原因。

您可以尝试使用OAuth 2.0 CTP version of DotNetOpenAuth并使用适用于OAuth 2.0的新API来查看是否有帮助。

答案 2 :(得分:0)