BasicAuthentication
This commit is contained in:
68
VERAG_REST_SERVER/BasicAuthentificationHandler.vb
Normal file
68
VERAG_REST_SERVER/BasicAuthentificationHandler.vb
Normal file
@@ -0,0 +1,68 @@
|
||||
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
|
||||
Reference in New Issue
Block a user