Аутентификация сервера удостоверений 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
        });

Лучший способ определить, что происходит - включить ведение журнала.

Другие вопросы по тегам