Я пытаюсь использовать Oauth для подключения к salesforce из приложения .NET.Я использую DotNetOpenAuth на данный момент, и мне не повезло.Я могу заставить Twitter / Google и т. Д. Работать нормально, но когда я создаю новый потребительский сервис для Salesforce, он просто выдает мне ошибку (400 / Bad Request)
Я использую 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());