Arhn - архитектура программирования

Ошибка загрузки DLL System.IdentityModel.Tokens.Jwt в проекте WebAPI2

Я получаю следующую ошибку в проекте WebApi2:

Не удалось загрузить файл или сборку «System.IdentityModel.Tokens.Jwt, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35» или одну из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

У меня установлен этот набор связанных пакетов NuGet, а также множество других:

«Microsoft.IdentityModel.Protocol.Extensions» версия = «1.0.2.206221351» targetFramework = «net45»

«Microsoft.Owin» версия = «3.0.1» targetFramework = «net45»

«Microsoft.Owin.Host.SystemWeb» версия = «3.0.1» targetFramework = «net45»

«Microsoft.Owin.Security» версия = «3.0.1» targetFramework = «net45»

«Microsoft.Owin.Security.ActiveDirectory» версия = «3.0.1» targetFramework = «net45»

«Microsoft.Owin.Security.Jwt» версия = «3.0.1» targetFramework = «net45»

«Microsoft.Owin.Security.OAuth» версия = «3.0.1» targetFramework = «net45»

«System.IdentityModel.Tokens.Jwt» версия = «4.0.2.206221351» targetFramework = «net45»

Кстати, у меня есть перенаправление привязки ниже в моем web.config, но он все еще пытается загрузить версию 4.0.

  <dependentAssembly>
    <assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.20622.1351" newVersion="4.0.20622.1351" />
  </dependentAssembly>

Любая помощь в устранении неполадок будет высоко оценена.


  • Проверьте версию System.IdentityModel.Tokens, она должна быть 4.0.0.0. 11.01.2016

Ответы:


1

Я столкнулся с точно такими же неприятностями.

Причина в том, что в последних версиях System.IdentityModel.Tokens.Jwt и System.IdentityModel.Tokens есть некоторая путаница версий NuGet, и они несовместимы с методом запуска UseJwtBearerAuthentication, для которого требуется System.IdentityModel v. 4.0.0.0.

Если вы используете nuget, вас легко запутать, потому что:

System.IdentityModel.Tokens доступен в nuget так же, как предварительный выпуск 5.0.0.112 (сейчас).

Последняя версия System.IdentityModel.Tokens.Jwt в nuget доступна в виде предварительной версии 5.0.0.112 ИЛИ стабильной версии 4.0.2.206221351.

НО, когда вы устанавливаете аутентификацию JWT в WebAPI

app.UseJwtBearerAuthentication(new JwtOptions());

Требуется System.IdentityModel версии 4.0.0.0.

Рабочее решение для меня:

1) удалить ранее установленный пакет nuget System.IdentityModel.Tokens

Uninstall-Package System.IdentityModel.Tokens

2) удалить последний пакет nuget System.IdentityModel.Tokens.Jwt

Uninstall-Package System.IdentityModel.Tokens.Jwt

3) установить System.IdentityModel.Tokens.Jwt версии 4.0.2.206221351 (последняя стабильная)

Install-Package System.IdentityModel.Tokens.Jwt -Version 4.0.2.206221351

4) добавить ссылку (не nuget!) на сборку .NET framework System.IdentityModel. Щелкните правой кнопкой мыши проект -> Ссылки -> Добавить ссылку -> Сборки -> Framework -> выберите System.IdentityModel 4.0.0.0.

Некоторые шаги могут отличаться в зависимости от того, что вы уже установили/удалили.

05.01.2016
  • работал!! PM› Uninstall-Package Microsoft.Owin.Security.Jwt PM› Uninstall-Package System.IdentityModel.Tokens.Jwt PM› Install-Package System.IdentityModel.Tokens.Jwt — Version 4.0.2.206221351 PM› Install-Package Microsoft.Owin. Безопасность.Jwt 28.01.2017
  • Работал! Спасибо. 17.03.2017

  • 2

    В моем случае помогает добавление перенаправления привязки.

    У меня есть приложение службы Windows, которое использует Microsoft.Owin.Security.Jwt (3.0.1) и System.IdentityModel.Tokens.Jwt (4.0.20622.1351); Как я вижу, Microsoft.Owin.Security.Jwt (3.0.1) имеет ссылку на System.IdentityModel.Tokens.Jwt (4.0.0) [katanaproject]:

    <Reference Include="System.IdentityModel.Tokens.Jwt, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\packages\System.IdentityModel.Tokens.Jwt.4.0.0\lib\net45\System.IdentityModel.Tokens.Jwt.dll</HintPath>
    </Reference>
    

    Исключение, упомянутое выше, произошло именно тогда, когда был сделан вызов:

    app.UseJwtBearerAuthentication(new CustomJwtOptions());
    

    Таким образом, я могу сделать вывод, что пакет Microsoft.Owin.Security.Jwt (3.0.1) пытается загрузить System.IdentityModel.Tokens.Jwt (4.0.0).

    ИЗМЕНИТЬ

    У нас есть простое приложение .net, которое распространяется с файлом app.exe.config. Изменение файла помогает решить указанную проблему:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <!-- ... -->
    <runtime>
        <!-- ... -->
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <!-- ... -->
            <dependentAssembly>
                <assemblyIdentity name="System.IdentityModel.Tokens.Jwt" 
                                  publicKeyToken="31bf3856ad364e35" 
                                  culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-4.0.20622.1351" 
                                 newVersion="4.0.20622.1351" />
            </dependentAssembly>
            <!-- ... -->
        </assemblyBinding>
        <!-- ... -->
    </runtime>
    <!-- ... -->
    </configuration>
    
    04.04.2016
  • Я столкнулся с точно такой же проблемой, как вы описали. Что на самом деле вы сделали, чтобы решить эту проблему? Я не мог понять, когда вы сказали - в моем случае помогает добавление перенаправления привязки. 19.05.2016
  • Отредактировал ответ, добавил больше ясности и образец конфигурации. 20.05.2016
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..