69 lines
2.1 KiB
VB.net
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
|