public IEnumerable <SecurityKey> ResolveSecurityKey(
            string token,
            SecurityToken securityToken,
            string kid,
            TokenValidationParameters validationParameters)
        {
            var requestContext = _contextDataProvider.GetRequestContext(_httpContextAccessor.HttpContext).Result;

            if (requestContext == null || !requestContext.IsTenantContext)
            {
                throw new UnauthorizedAccessException(ErrorCode.MissingTenantContext.ToString());
            }
            if (requestContext.Tenant.TenantCode != kid)
            {
                throw new UnauthorizedAccessException(ErrorCode.KidMissmatch.ToString());
            }

            var tenantSettings = _tenantProvider.GetTenantSettings(requestContext.Tenant.TenantCode);

            if (string.IsNullOrEmpty(tenantSettings?.TokenSecret))
            {
                throw new UnauthorizedAccessException(ErrorCode.MissingTenantTokenSecret.ToString());
            }

            return(new[]
            {
                new SymmetricSecurityKey(Encoding.UTF8.GetBytes(tenantSettings.TokenSecret))
            });
        }
Esempio n. 2
0
        public async Task <TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate <TResponse> next)
        {
            var requestContext = await _contextDataProvider.GetRequestContext(_contextAccessor.HttpContext);

            request.SetContext(requestContext);

            return(await next());
        }
Esempio n. 3
0
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            foreach (var argument in context.ActionArguments.Values)
            {
                if (!(argument is ITenantRequest request))
                {
                    continue;
                }

                var requestContext = await _contextDataProvider.GetRequestContext(context.HttpContext);

                if (requestContext.IsTenantContext)
                {
                    request.TenantId = requestContext.Tenant.TenantId;
                }
            }

            await next();
        }