Я пытаюсь внедрить OWIN в наш устаревший vb. net проект веб-форм, мы должны работать с нашей реализацией SSO на Azure. Однако при запуске я не могу запустить класс startup.vb. Я добавил:
<add key="owin:AppStartup" value="StartUp" />
<add key="owin:AutomaticAppStartup" value="true " />
Но я все еще не могу запустить реализованный мной класс StartUp. Я ожидаю, что меня перенаправят на нашу систему единого входа от Microsoft, однако этого не происходит. На inte rnet не так много возможностей для использования OWIN с VB. NET также.
Imports Owin
Partial Public Class Startup
Public Sub Configuration(ByVal app As IAppBuilder)
ConfigureAuth(app)
End Sub
End Class
Imports Microsoft.Owin.Extensions
Imports Microsoft.Owin.Security
Imports Microsoft.Owin.Security.Cookies
Imports Microsoft.Owin.Security.OpenIdConnect
Imports Owin
Imports System
Imports System.Configuration
Imports System.Linq
Imports System.Security.Claims
Imports System.Threading.Tasks
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 authority As String = aadInstance & tenantId
Public Sub ConfigureAuth(ByVal 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) System.Threading.Tasks.Task.FromResult(0),
.SecurityTokenValidated = Function(context)
Dim claims = context.AuthenticationTicket.Identity.Claims
Dim groups = From c In claims Where c.Type = "groups" Select c
For Each group In groups
context.AuthenticationTicket.Identity.AddClaim(New Claim(ClaimTypes.Role, group.Value))
Next
Return Task.FromResult(0)
End Function
}
})
app.UseStageMarker(PipelineStage.Authenticate)
End Sub
Private Shared Function EnsureTrailingSlash(ByVal value As String) As String
If value Is Nothing Then
value = String.Empty
End If
If Not value.EndsWith("/", StringComparison.Ordinal) Then
Return value & "/"
End If
Return value
End Function
End Class
Спасибо