Add project files.
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Duende.IdentityServer.Models;
|
||||
using Duende.IdentityServer.Validation;
|
||||
|
||||
namespace LiteCharmsSecurity.STS.Identity.Helpers
|
||||
{
|
||||
public class DelegationGrantValidator : IExtensionGrantValidator
|
||||
{
|
||||
private readonly ITokenValidator _validator;
|
||||
|
||||
public DelegationGrantValidator(ITokenValidator validator)
|
||||
{
|
||||
_validator = validator;
|
||||
}
|
||||
|
||||
public string GrantType => "delegation";
|
||||
|
||||
public async Task ValidateAsync(ExtensionGrantValidationContext context)
|
||||
{
|
||||
var userToken = context.Request.Raw.Get("token");
|
||||
|
||||
if (string.IsNullOrEmpty(userToken))
|
||||
{
|
||||
context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant);
|
||||
return;
|
||||
}
|
||||
|
||||
var result = await _validator.ValidateAccessTokenAsync(userToken);
|
||||
if (result.IsError)
|
||||
{
|
||||
context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant);
|
||||
return;
|
||||
}
|
||||
|
||||
// get user's identity
|
||||
var sub = result.Claims.FirstOrDefault(c => c.Type == "sub").Value;
|
||||
|
||||
context.Result = new GrantValidationResult(sub, GrantType);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user