我正在尝试使用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());
答案 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)
salesforce Rest API和.net的示例 http://danlb.blogspot.com/2010/10/salesforcecom-rest-api.html