Добавление общедоступных страниц в код .Net 4.7.2 Visual Basic с проверкой подлинности Azure

Мне поручено добавить Azure Auth в существующий код .NET Framework 4.7.2 Visual Basic (вздох).

Поэтому я создал пустой проект и настроил все подключения к Azure, и до этого момента он работал нормально.

Теперь я застрял, добавляя общедоступные страницы в этот проект, потому что по умолчанию все страницы перенаправляются на страницу входа в Microsoft.

Как добавить одну или несколько общедоступных страниц (например, Home.aspx, Contact.aspx и т. д.)?

Мой код запуска ниже. Если вам нужно больше, спросите меня, какой из них, и я могу добавить.

App_Start/StartupAuth.vb

Imports System.Globalization
Imports System.Threading.Tasks
Imports Microsoft.Owin.Extensions
Imports Microsoft.Owin.Security
Imports Microsoft.Owin.Security.Cookies
Imports Microsoft.Owin.Security.OpenIdConnect
Imports Owin

Partial Public Class Startup
    Private Shared clientId As String = ConfigurationManager.AppSettings("ida:ClientId")
    Private Shared aadInstance As String = EnsureTrailingSlash(ConfigurationManager.AppSettings("ida:AADInstance"))
    Private Shared tenantId As String = ConfigurationManager.AppSettings("ida:TenantId")
    Private Shared postLogoutRedirectUri As String = ConfigurationManager.AppSettings("ida:PostLogoutRedirectUri")
    Private Shared authority As String = aadInstance & tenantId

    Public Sub ConfigureAuth(app As IAppBuilder)
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType)

        app.UseCookieAuthentication(New CookieAuthenticationOptions())

        app.UseOpenIdConnectAuthentication(New OpenIdConnectAuthenticationOptions() With {
            .ClientId = clientId,
            .Authority = authority,
            .PostLogoutRedirectUri = postLogoutRedirectUri,
            .Notifications = New OpenIdConnectAuthenticationNotifications() With {
              .AuthenticationFailed = Function(context)
                                          Return Task.FromResult(0)
                                      End Function
              }
        })
        ' This makes any middleware defined above this line run before the Authorization rule is applied in web.config
        app.UseStageMarker(PipelineStage.Authenticate)
    End Sub

    Private Shared Function EnsureTrailingSlash(ByRef value As String) As String
        If (IsNothing(value)) Then
            value = String.Empty
        End If

        If (Not value.EndsWith("/", StringComparison.Ordinal)) Then
            Return value & "/"
        End If

        Return value
    End Function
End Class

Файлы в проекте

web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
   https://go.microsoft.com/fwlink/?LinkId=301880

  -->
<configuration>
  <appSettings>
    <add key="ida:ClientId" value="xxxxxxxx-xxxx-xxxx-xxxx-ca2f05b770b1" />
    <add key="ida:AADInstance" value="https://login.microsoftonline.com/" />
    <add key="ida:Domain" value="xxx.xxx.xx" />
    <add key="ida:TenantId" value="9696b0a8-xxx-xxxx-xxxx-xxxxxxxxx" />
    <add key="ida:PostLogoutRedirectUri" value="https://localhost:44308/" />
  </appSettings>
  <location path="Account">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
  <system.web>
    <authorization>
      <deny users="?" />
    </authorization>
    <authentication mode="None" />
    <compilation debug="true" targetFramework="4.7.2" />
    <httpRuntime targetFramework="4.7.2" />
    <pages>
      <namespaces>
        <add namespace="System.Web.Optimization" />
      </namespaces>
      <controls>
        <add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt" />
      </controls>
    </pages>
  </system.web>
  <system.webServer>
    <modules>
      <remove name="FormsAuthentication" />
    </modules>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" />
        <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.IdentityModel.Tokens" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.IdentityModel.Protocols.OpenIdConnect" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.IdentityModel.Protocols" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>
</configuration>

Не могли бы вы поделиться своим appsettings файлом?

Harshitha 21.11.2022 12:43

В проектах @Harshitha WebForms нет файла настроек приложения, вместо этого у них есть web.config.

Dai 21.11.2022 12:53

Нет файла appsettings. Я отредактировал вопрос и перечислил все файлы, которые у меня есть.

Ergec 21.11.2022 12:54

Да, файл web.config, я имел в виду настройки, которые вы сделали для своего приложения.

Harshitha 21.11.2022 12:55

Вы говорите, что это существующий проект, но этот список файлов выглядит почти так же, как новый проект, созданный из стандартного шаблона проекта ASP.NET (только каталог Account, Ergec.aspx и ViewSwitcher.ascx не по умолчанию).

Dai 21.11.2022 12:55

@Harshitha Я добавил web.config.

Ergec 21.11.2022 12:57

@Dai Я тестирую новый проект, чтобы убедиться, что он работает. Потом добавлю к существующему.

Ergec 21.11.2022 12:57

В Web.config измените location path на Account.aspx и проверьте один раз.

Harshitha 23.11.2022 11:43

@ Харшита, да и нет. добавление aspx не работает, но я добавил Index.aspx под Account, а /Account/Index работал как общедоступный. Также создал фиктивную папку и поместил в нее Dummy.aspx, и /DummyFolder/Dummy тоже заработало. Большое спасибо. Опубликуйте это как ответ, и я приму его.

Ergec 23.11.2022 15:11

Конечно, я опубликую ответ.

Harshitha 23.11.2022 15:13
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
10
135
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Конфигурации, которые вы сделали в файле Web.config, чтобы разрешить пользователям доступ к общедоступным страницам, верны, за исключением проверки подлинности Azure.

  • Но вы пропустили .aspx и foldername в пути местоположения.

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

  <location path="PageName.aspx">
  • Основываясь на структуре вашей папки, если вы хотите предоставить доступ к Default.aspx, путь к местоположению должен быть
  <location path="Default.aspx">
  • Если вы хотите предоставить доступ к странице, которая находится в папке, то она должна быть
   <location path="Accounts/Account.aspx">

enter image description here

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