2016-11-21 2 views
0

Я сделал проект некоторое время назад, используя oAuth2 и OpenID для управления доступом, и мне удалось заставить его работать красиво, но теперь я начал новый проект, и мне нужно снова выполнить проверку маркера. Я использовал те же шаблоны, настройки, настройки и технологии, что и в предыдущем проекте (90% настроек одинаковы), и мои токены заполнены правильно и переданы в мой API в виде заголовка с HTTP-запросами:oAuth2 Токен не получен API

Old

Old Project Headers

Перевод: { "ISS": "https://localhost", "ауд": "https://localhost/resources", "ехр": 1479710870, "НСБ": 1479707270, "client_id": " неявный ", " Сфера ": [ "Вконтакте", "Профиль", "роли", "паутина" ], "суб": "55dad807b33c2c2648342757", "auth_time": 1479705621, "IDP": "idsrv" , "роль": "Администратор", "функция" : [ "форма-вид", "форм-добавить", "... и т.д." ], "АСКУЭ": [ "пароль" ]

New Project Headers

Перевод: { "ISS": "https://localhost", "ауд": "https://localhost/resources", "ехр": 1479711165, "НСБ": 1479707565, "client_id": «неявное », "Объем": [ "Вконтакте", "профиль", "роли", "паутина" ], "суб": "СИСТЕМА", "auth_time": 1479707564, "IDP" : "idsrv", "роль ": "Системный пользователь", "функция": [ "ADD_BUSS_UNIT", "ADD_EMP", " ... и т.д.» ], "АСКУЭ": [ "пароль" ] }

(Кэш-контроль является дополнительным в новом проекте, может ли это вызвать проблему? Кажется маловероятным?)

В любом случае, по какой-то причине, когда я добираюсь до контроллера, HttpContext.Current.User.Identity заполняется как System.Security.Principal.WindowsIdentity вместо ClaimsIdentity, что я ожидал увидеть:

Старый

Old Project User

Новый

New Project User

Самая большая разница между этими двумя проектами является то, что новый один работает в Windows Server 2008 R2 и старый работают в Windows7. Варианты IIS одинаковы, и настройка в IIS также та же, и, как я уже упоминал, большинство других настроек одинаковы.

My Startup класса для API:

public void Configuration(IAppBuilder app) 
{ 
// Allow all origins 
app.UseCors(CorsOptions.AllowAll); 

JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>(); 
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 

app.UseIdentityServerBearerTokenAuthentication(
    new IdentityServerBearerTokenAuthenticationOptions 
    { 
     Authority = Constants.STSAuthEndPoint, 
     RoleClaimType = "role", 
     RequiredScopes = new[] { "web" } 
    }); 
} 

Несколько идей с моей стороны, почему это не работает:

  1. Олицетворение - Может быть, что IIS или Windows Server прикидывается Пользователь? Я проверил настройки между двумя серверами, и все выглядит одинаково.
  2. Значение SUB - я использую имя пользователя в новом проекте и использовал идентификатор формата Guid на предыдущем. Я помню, что я видел что-то о том, что значение sub является комбинацией двух значений, но я не знаю, может ли это вызвать проблему?
  3. Роль. Может ли место в названии роли быть причиной?
  4. Экран входа в систему - я создал новый экран входа для нового проекта, который намного более настраивается, чем предыдущий, но вход работает, API просто не подбирает этого пользователя.

У меня есть ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ, которую я могу предоставить, но я не хочу, чтобы сообщение было слишком длинным, поэтому, пожалуйста, дайте мне знать, требуется ли дополнительная информация.

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

+0

- ваше новое приложение, работающее с аутентификацией Windows? – Developer

+0

Не было, нет. Я отключил все auth, за исключением анонимных, но я думаю, что нашел проблему, обновляюсь с ответом через минуту. –

ответ

0

Похоже, что это была красная сельдь, и проблема в том, что мой класс запуска OWIN не стрелял. Я узнал об этом, потому что я пытался уйти в мой класс запуска и не мог, так что я читал немного о том, что и нашел следующую статью:

OwinStartup not firing

я установил Microsoft.Owin.Host.SystemWeb пакет по проекту, используя nuget и voila! Похоже, он работает сейчас!