Я пытаюсь получить рабочий пример аутентификации приложения MVC в .NET против Salesforce, используя свой рабочий процесс проверки подлинности OAuth
. Я ссылаюсь на это пошаговое руководство, которое довольно просто. Это очень похоже на то, чтобы работать с аутентификацией Google. Это сводится к настройке проекта .NET MVC с помощью индивидуального шаблона проверки подлинности учетной записи и развертыванию нового подключенного приложения в Salesforce. Затем добавьте библиотеку Owin.Security.Providers
для Salesforce, скорректируйте Startup.Auth.cs и включите ClientId
и ClientSecret
из приложения Salesforce, а также конечные точки авторизации и токена. Предлагаемый URL-адрес обратного вызова http://localhost:[port]/signin-salesforce, который очень похож на URL-адрес обратного вызова, используемый для аутентификации Google.
Пока я перенаправлен в Salesforce и могу войти в систему, рукопожатие, возвращающее меня обратно в мое приложение MVC, похоже, сталкивается с проблемой, которую я не могу прибить. Я перенаправляюсь обратно на страницу входа в систему, и .NET, похоже, не знает о моей учетной записи, хотя у меня определенно есть активный сеанс с Salesforce (панель управления Salesforce автоматически войдет в систему). В коде все начинается здесь:
// GET: /Account/ExternalLoginCallback
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}
//more code we never reach
}
loginInfo
всегда равно нулю. Итак, чтобы выяснить, какой запрос отправляется на .NET, я обратился к Fiddler и встретил запрос от localhost:[port]/signin-salesforce
с кучей параметров, который вызывает любопытный ответ:
HTTP/1.1 302 Найдено
Местоположение:/Account/ExternalLoginCallback? error = access_denied
Сервер: Microsoft-IIS/10.0
Set-Cookie:.AspNet.Correlation.Salesforce =; Путь =/; expires = Thu, 01-Jan-1970 00:00:00 GMT
X файлы исходного кода:??? = UTF-8 В YzpcdXNlcnNcc3RldmUuY2FtaXJlXGRvY3VtZW50c1x2aXN1YWwgc3R1ZGlvIDIwMTVcUHJvamVjdHNcU2FsZXNGb3JjZUludGVncmF0aW9uXFNhbGVzRm9yY2VJbnRlZ3JhdGlvblxzaWduaW4tc2FsZXNmb3JjZQ == =
X-Powered-By: ASP.NET
Дата: Пт, 20 мая 2016 21:46:09 GMT
Content-Length: 0
Обратите внимание на заголовок Location, который указывает .NET на перенаправление на /Account/ExternalLoginCallback
с параметром ошибки "access_denied". Включение некоторой трассировки в Owin
показывает, что что-то возвращает 400 либо в .NET, либо в .NET, но я не знаю, что.
Итак, вот где я. A null
loginInfo в моем контроллере и свидетельствует о том, что в некоторых веб-запросах что-то не так. Я просмотрел несколько других связанных вопросов, но почти никто не фокусируется на SalesForce, и они предоставляют ответы, которые на самом деле не применимы (например, у меня нет API Google+ для включения). Любые идеи о том, как исправить это?