Мне поручено добавить 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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
</configuration>
В проектах @Harshitha WebForms нет файла настроек приложения, вместо этого у них есть web.config
.
Нет файла appsettings. Я отредактировал вопрос и перечислил все файлы, которые у меня есть.
Да, файл web.config
, я имел в виду настройки, которые вы сделали для своего приложения.
Вы говорите, что это существующий проект, но этот список файлов выглядит почти так же, как новый проект, созданный из стандартного шаблона проекта ASP.NET (только каталог Account
, Ergec.aspx
и ViewSwitcher.ascx
не по умолчанию).
@Harshitha Я добавил web.config.
@Dai Я тестирую новый проект, чтобы убедиться, что он работает. Потом добавлю к существующему.
В Web.config
измените location path
на Account.aspx
и проверьте один раз.
@ Харшита, да и нет. добавление aspx не работает, но я добавил Index.aspx
под Account
, а /Account/Index
работал как общедоступный. Также создал фиктивную папку и поместил в нее Dummy.aspx
, и /DummyFolder/Dummy
тоже заработало. Большое спасибо. Опубликуйте это как ответ, и я приму его.
Конечно, я опубликую ответ.
Конфигурации, которые вы сделали в файле Web.config
, чтобы разрешить пользователям доступ к общедоступным страницам, верны, за исключением проверки подлинности Azure.
Но вы пропустили .aspx
и foldername
в пути местоположения.
Если вы хотите получить доступ к странице, которая находится в корне приложения, путь к местоположению должен быть
<location path="PageName.aspx">
Default.aspx
, путь к местоположению должен быть <location path="Default.aspx">
<location path="Accounts/Account.aspx">
Не могли бы вы поделиться своим
appsettings
файлом?