I am trying to implement OWIN into our legacy vb.net web forms project we have to work with our SSO implementation on Azure. However on start-up I can not seem to be able to run the startup.vb class. I have added:
<add key="owin:AppStartup" value="StartUp" />
<add key="owin:AutomaticAppStartup" value="true " />
But I still can not seem to launch the StartUp Class I have implemented. What I am expecting is to be redirected to our SSO from Microsoft however that is not happening. There isn't much on the internet for using OWIN with VB.NET also.
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
Thank You