in src/Core/Compiling/Policy/ValidateJwtCompiler.cs [18:72]
public void Handle(ICompilationContext context, InvocationExpressionSyntax node)
{
if (!node.TryExtractingConfigParameter<ValidateJwtConfig>(context, "validate-jwt", out var values))
{
return;
}
var element = new XElement("validate-jwt");
if (new[]
{
element.AddAttribute(values, nameof(ValidateJwtConfig.HeaderName), "header-name"),
element.AddAttribute(values, nameof(ValidateJwtConfig.QueryParameterName), "query-parameter-name"),
element.AddAttribute(values, nameof(ValidateJwtConfig.TokenValue), "token-value"),
}.Count(b => b) != 1)
{
context.Report(Diagnostic.Create(
CompilationErrors.OnlyOneOfTreeShouldBeDefined,
node.ArgumentList.GetLocation(),
"validate-jwt",
nameof(ValidateJwtConfig.HeaderName),
nameof(ValidateJwtConfig.QueryParameterName),
nameof(ValidateJwtConfig.TokenValue)
));
return;
}
element.AddAttribute(values, nameof(ValidateJwtConfig.FailedValidationHttpCode), "failed-validation-httpcode");
element.AddAttribute(values, nameof(ValidateJwtConfig.FailedValidationErrorMessage),
"failed-validation-error-message");
element.AddAttribute(values, nameof(ValidateJwtConfig.RequireExpirationTime), "require-expiration-time");
element.AddAttribute(values, nameof(ValidateJwtConfig.RequireScheme), "require-scheme");
element.AddAttribute(values, nameof(ValidateJwtConfig.RequireSignedTokens), "require-signed-tokens");
element.AddAttribute(values, nameof(ValidateJwtConfig.ClockSkew), "clock-skew");
element.AddAttribute(values, nameof(ValidateJwtConfig.OutputTokenVariableName), "output-token-variable-name");
if (values.TryGetValue(nameof(ValidateJwtConfig.OpenIdConfigs), out var openIdConfigs))
{
var openIdElements = HandleOpenIdConfigs(context, openIdConfigs);
element.Add(openIdElements);
}
HandleKeys(context, element, values, nameof(ValidateJwtConfig.IssuerSigningKeys), "issuer-signing-keys");
HandleKeys(context, element, values, nameof(ValidateJwtConfig.DescriptionKeys), "decryption-keys");
GenericCompiler.HandleList(element, values, nameof(ValidateJwtConfig.Audiences), "audiences", "audience");
GenericCompiler.HandleList(element, values, nameof(ValidateJwtConfig.Issuers), "issuers", "issuer");
if (values.TryGetValue(nameof(ValidateJwtConfig.RequiredClaims), out var requiredClaims))
{
XElement claimsElement = ClaimsConfigCompiler.HandleRequiredClaims(context, requiredClaims);
element.Add(claimsElement);
}
context.AddPolicy(element);
}