43 lines
1.3 KiB
C#
43 lines
1.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |