CORS не работает, когда GrantResourceOwnerCredentials ссылается на System.Web.Helpers.

1

У меня есть простая (только для устранения неполадок) реализация OAuthAuthorizationServerProvider где я переопределяю метод GrantResourceOwnerCredentials следующим образом:

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
    context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
    context.SetError("invalid_grant", "The user name or password is incorrect.");
}

Первая строка позволяет CORS, а вторая строка просто аннулирует контекст. При тестировании с использованием Chrome это работает так, как ожидалось. Я возвращаю 400 (неудачный запрос), когда я отправляю POST в конечную точку маркера.

Однако в тот момент, когда я вводил любую ссылку на System.Web.Helpers.Crypto, CORS больше не работает, и я возвращаюсь. На запрошенном ресурсе присутствует заголовок "Access-Control-Allow-Origin". Например, CORS терпит неудачу, если я изменю приведенное выше:

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
        var salt = System.Web.Helpers.Crypto.GenerateSalt();
        context.SetError("invalid_grant", "The user name or password is incorrect.");
    }

Это, конечно же, надуманный пример, который я придумал, но устраняя проблему. В фактическом GrantResourceOwnerCredentials используется Crypto.VerifyHashedPassword(), что вызывает ту же проблему. Кроме того, в качестве теста я быстро завернул вызов Crypto в другой класс, но проблема не устранена.

Я столкнулся с странной ошибкой? Любое направление с этим было бы оценено.

ОБНОВЛЕНИЕ: Дальнейшее исследование показало, что эта проблема, по-видимому, происходит с любой ссылкой на System.Web.Helpers. Другими словами, это не относится к классу System.Web.Helpers.Crypto.

  • 1
    вау, это будет очень серьезная ошибка, если ваш диагноз верен ... что заставляет меня думать, что это, вероятно, неправильно :) могли бы вы использовать инструмент, такой как fiddler, для перехвата HTTP-трафика и поделиться с нами тем, что на самом деле происходит по проводам ?
  • 0
    спасибо за предложение использовать fiddler, который помог выявить основную проблему - происходит исключение: «Не удалось загрузить файл или сборку« System.Web.Helpers »или ...», теперь мне просто нужно выяснить, почему.
Теги:
asp.net-web-api
owin

1 ответ

1
Лучший ответ

Оказывается, исключение происходило до того, как заголовок "Access-Control-Allow-Origin" мог быть записан. Выполнение кода не выявило исключения. Однако, как только я использовал скрипача, как рекомендовал @Robert Levy, я увидел полный ответ, в котором содержалось исключение - "Не удалось загрузить файл или сборку" System.Web.Helpers ". Я отслеживал проблему вниз к web.config, где dependentAssembly вход для System.Web.Helpers был неправильный номер версии:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="2.0.0.0"/>
  </dependentAssembly>

newVersion был установлен в 3.0.0.0 но версия сборки 2.0.0.0. Это изменение в web.config исправило проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню