Аутентификация сервера удостоверений ThinkTect Server 3 работает правильно в iis Express, но продолжает выдавать 401 без разрешения при размещении в iis
Итак, я попытался разместить самый простой пример oauth и сервер идентификации на iis, у меня есть включение cors в простейшем примере oauth. Поэтому, когда я тестирую API с помощью неявного клиента javascript, в iis express он работает безупречно, он получает токен, а затем при отправке токена веб-API проверяет токен и авторизует клиент javascript. проблема возникает, когда я перемещаю неявный клиент javascript, сервер идентификации и простой веб-интерфейс клятвы, размещенный на iis, javascript корректно возвращает токен, но когда токен отправляется в веб-интерфейс, он всегда возвращает 401 неавторизованным. Так что есть какая-то конфигурация, которую я должен добавить, чтобы запустить ее на iis. Я удостоверился, что анонимная аутентификация - единственный доступный режим аутентификации. Любая помощь или указатель глубоко признателен.
Я пытаюсь реализовать образцы, приведенные на iis. Спасибо за помощь
1 ответ
Я была такая же проблема. Это исходило из моего самозаверяющего сертификата.
Попробуйте добавить в ваши IdentityServerOptions
RequireSsl = false
и переключите администрацию WebApi на использование http.
редактировать
Конфигурация на стороне сервера
public void ConfigureIdentityServer(IAppBuilder app)
{
//Configure logging
LogProvider.SetCurrentLogProvider(new DiagnosticsTraceLogProvider());
//This is using a Factory Class that generates the client, user & scopes. Can be seen using the exmaples
var IdentityFactory = Factory.Configure("DefaultConnection");
app.Map("/identity", idsrvApp =>
{
idsrvApp.UseIdentityServer(new IdentityServerOptions
{
SiteName = "Security Proof of Concept",
SigningCertificate = LoadCertificate(),
Factory = IdentityFactory,
CorsPolicy = CorsPolicy.AllowAll,
RequireSsl = false
});
});
}
JavaScript
После получения токена убедитесь, что он вставлен в заголовок авторизации.
Пример JQuery
$.ajax({
url: 'http://your.url',
type: GET,
beforeSend: function (xhr) {
xhr.withCredentials = true;
xhr.setRequestHeader("Authorization", " Bearer " + apiToken);
}
});
Ресурс WebApi
app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
//Location of identity server make full url & port
Authority = "http://localhost/identity",
RequiredScopes = new[] { "WebApiResource" }
//Determines if the Api Pings the Identity Server for validation or will decrypt token by it's self
//ValidationMode = ValidationMode.Local
});
Лучший способ определить, что происходит - включить ведение журнала.