У меня есть простая (только для устранения неполадок) реализация 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.
Оказывается, исключение происходило до того, как заголовок "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 исправило проблему.