Files
REST_SERVER/VERAG_REST_SERVER/BasicAuthentificationHandler.vb
2023-02-27 09:12:32 +01:00

69 lines
2.1 KiB
VB.net

Imports System.Net.Http.Headers
Imports System.Security.Claims
Imports System.Text.Encodings.Web
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Authentication
Imports Microsoft.Extensions.Logging
Imports Microsoft.Extensions.Options
Imports Microsoft.AspNetCore.Http.Abstractions
Public Class BasicAuthentificationHandler
Inherits AuthenticationHandler(Of AuthenticationSchemeOptions)
ReadOnly _userService As IUserService
Public Sub New(userService As IUserService, options As Microsoft.Extensions.Options.IOptionsMonitor(Of AuthenticationSchemeOptions), logger As ILoggerFactory, encoder As UrlEncoder, clock As ISystemClock)
MyBase.New(options, logger, encoder, clock)
_userService = userService
End Sub
Protected Overrides Function HandleChallengeAsync(properties As AuthenticationProperties) As Task
GetResponse().Headers("WWW-Authenticate") = "Basic"
Return MyBase.HandleChallengeAsync(properties)
End Function
Private Function GetResponse() As Object
Return Response
End Function
Protected Overrides Function HandleAuthenticateAsync() As Task(Of AuthenticateResult)
Dim username As String = ""
Try
Dim authHeader = AuthenticationHeaderValue.Parse(GetResponse().Headers("Authorization"))
Dim credentials = Encoding.UTF8.GetString(Convert.FromBase64String(authHeader.Parameter)).Split(":")
username = credentials.FirstOrDefault
Dim password = credentials.LastOrDefault
If Not _userService.CheckUser(username, password) Then
Throw New NotImplementedException("Invalid Username or password")
End If
Catch ex As Exception
Return Task.FromResult(AuthenticateResult.Fail(ex.Message))
End Try
Dim claims = {New Claim(ClaimTypes.Name, username)}
Dim idendity = New ClaimsIdentity(claims, Scheme.Name)
Dim principal = New ClaimsPrincipal(idendity)
Dim ticket = New AuthenticationTicket(principal, Scheme.Name)
Return Task.FromResult(AuthenticateResult.Success(ticket))
End Function
End Class