Разрешить анонимный доступ к.well-известному каталогу

Пожалуйста, потерпите меня: я новичок во всем этом

Я работаю над интеграцией OpenID Connect с парой приложений, разработанных компанией.

мы используем пользовательские / специфичные для компании библиотеки openid connect, которые, я думаю, по сути являются обертками вокруг Microsoft.Owin.Security.OpenIdConnect и Owin.Security.OpenIdConnect.Server

в приложении idP web.config у нас есть что-то вроде:

<location path="." inheritInChildApplications="false">
    <authentication mode="Forms">
        <forms loginUrl="~/Login" name="{....}" protection="All" path="/" slidingExpiration="true" requireSSL="false" defaultUrl="~/Home" cookieless="UseCookies" />
    </authentication>
    <authorization>
        <deny users="?" />
        <!-- denies anonymous users to all pages, except those defined under location nodes -->
    </authorization>
</location>

плюс множество узлов местоположения, чтобы разрешить / запретить доступ к определенным страницам / ресурсам

проблема в том, что когда openid connect выполняет попытку доступа к /.well-known/openid-configuration, когда пользователь не вошел в систему (или, кажется, в процессе входа в систему), ответом является перенаправление 302 на имя входа страница

очевидно, это вызывает проблемы, когда ожидается ответ JSON

я попытался добавить узел местоположения в web.config:

<location path= "~/.well-known/openid-configuration">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>

(я также пытался с path = "~/.well-known")

но я все еще перенаправлен на страницу входа

чтобы быть понятным, в приложении idP нет фактического каталога /.well-known; файл создается где-то в Owin.Security.OpenIdConnect.Server.

2 ответа

Решение

файл создается где-то в Owin.Security.OpenIdConnect.Server

Да, это.

Попробуйте позвонить app.UseStageMarker(PipelineStage.Authenticate) сразу после регистрации промежуточного программного обеспечения сервера OIDC, чтобы предотвратить применение ASP.NET политик авторизации до того, как у него появится возможность вызвать его:

app.UseOpenIdConnectServer(options => {
    options.AllowInsecureHttp = true;
});

app.UseStageMarker(PipelineStage.Authenticate);

Обратите внимание, что вам не нужно исключение для ~/.well-known/openid-configuration в вашем web.config когда используешь app.UseStageMarker(),

Я тоже новичок, но я думаю, что вы указали путь к странице.aspx в этом месте, а остальное унаследовано. Просто измените запрет, чтобы разрешить пользователям звёздочку. Также убедитесь, что файл web.config находится в каталоге. Звучит так, как вы, но в общеизвестном случае должен быть файл web.config с разрешением всем пользователям.

<?xml version="1.0"?>
<configuration>

  <location path="Manage.aspx">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>
</configuration>
Другие вопросы по тегам