using System;
using System.Net.Http.Headers;
using System.Security.Claims;
using System.Text;
using System.Text.Encodings.Web;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
namespace MovejobtoWms.Helpers
{
public class CustomAuthenticationHandler : AuthenticationHandler<AuthenticationSchemeOptions>
{
// private readonly IUserService _userService;
public CustomAuthenticationHandler(
IOptionsMonitor<AuthenticationSchemeOptions> options,
ILoggerFactory logger,
UrlEncoder encoder,
ISystemClock clock)
: base(options, logger, encoder, clock)
{
//_userService = userService;
}
protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
if (!Request.Headers.ContainsKey("Authorization") || !Request.Headers.ContainsKey(""))
{
return AuthenticateResult.Fail("Missing Authorization Header");
}
// User user = null;
try
{
var authHeader = AuthenticationHeaderValue.Parse(Request.Headers[""]);
var tokenkey = AuthenticationHeaderValue.Parse(Request.Headers[""]);
var credentialBytes = Convert.FromBase64String(authHeader.Parameter);
var credentials = Encoding.UTF8.GetString(credentialBytes).Split(new[] { ':' }, 2);
var username = credentials[0];
var password = credentials[1];
// user = await _userService.Authenticate(username, password);
bool isvalid = tokenkey.Scheme.Equals("");
bool isvalidusrNamePassword = username.Equals("") && password.Equals("");
if (isvalid && isvalidusrNamePassword)
{
var claims = new[] {
new Claim(ClaimTypes.NameIdentifier,System.Environment.UserName),
new Claim(ClaimTypes.Name, System.Environment.UserName),
};
var identity = new ClaimsIdentity(claims, Scheme.Name);
var principal = new ClaimsPrincipal(identity);
var ticket = new AuthenticationTicket(principal, Scheme.Name);
return AuthenticateResult.Success(ticket);
}
else if (isvalid && !isvalidusrNamePassword)
{
return AuthenticateResult.Fail("Invalid UserName and Password");
}
else if (!isvalid && !isvalidusrNamePassword)
{
return AuthenticateResult.Fail("Invalid Token Key");
}
else
{
return AuthenticateResult.Fail("Both Token key and UserName Password Incorrect");
}
}
catch
{
return AuthenticateResult.Fail("Invalid Authorization Header");
}
}
}
}
Comments
Post a Comment