Я сделал проект некоторое время назад, используя oAuth2 и OpenID для управления доступом, и мне удалось заставить его работать красиво, но теперь я начал новый проект, и мне нужно снова выполнить проверку маркера. Я использовал те же шаблоны, настройки, настройки и технологии, что и в предыдущем проекте (90% настроек одинаковы), и мои токены заполнены правильно и переданы в мой API в виде заголовка с HTTP-запросами:oAuth2 Токен не получен API
Old
Перевод: { "ISS": "https://localhost", "ауд": "https://localhost/resources", "ехр": 1479710870, "НСБ": 1479707270, "client_id": " неявный ", " Сфера ": [ "Вконтакте", "Профиль", "роли", "паутина" ], "суб": "55dad807b33c2c2648342757", "auth_time": 1479705621, "IDP": "idsrv" , "роль": "Администратор", "функция" : [ "форма-вид", "форм-добавить", "... и т.д." ], "АСКУЭ": [ "пароль" ]
Перевод: { "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, что я ожидал увидеть:
Старый
Новый
Самая большая разница между этими двумя проектами является то, что новый один работает в 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" }
});
}
Несколько идей с моей стороны, почему это не работает:
- Олицетворение - Может быть, что IIS или Windows Server прикидывается Пользователь? Я проверил настройки между двумя серверами, и все выглядит одинаково.
- Значение SUB - я использую имя пользователя в новом проекте и использовал идентификатор формата Guid на предыдущем. Я помню, что я видел что-то о том, что значение sub является комбинацией двух значений, но я не знаю, может ли это вызвать проблему?
- Роль. Может ли место в названии роли быть причиной?
- Экран входа в систему - я создал новый экран входа для нового проекта, который намного более настраивается, чем предыдущий, но вход работает, API просто не подбирает этого пользователя.
У меня есть ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ, которую я могу предоставить, но я не хочу, чтобы сообщение было слишком длинным, поэтому, пожалуйста, дайте мне знать, требуется ли дополнительная информация.
Я ценю любую помощь, которая может быть предоставлена.
- ваше новое приложение, работающее с аутентификацией Windows? – Developer
Не было, нет. Я отключил все auth, за исключением анонимных, но я думаю, что нашел проблему, обновляюсь с ответом через минуту. –