You should not shadow the polygons that are back faced from the light.
I changed your fragment shader to below code.
float CalcShadowFactor(vec4 lightspace_Position)
{
vec3 ProjectionCoords = lightspace_Position.xyz / lightspace_Position.w;
vec2 UVCoords;
UVCoords.x = 0.5 * ProjectionCoords.x + 0.5;
UVCoords.y = 0.5 * ProjectionCoords.y + 0.5;
float Depth = texture(inShadowMap, UVCoords).x;
if(Depth < (ProjectionCoords.z + 0.001)) return 0.5;
else return 1.0;
}
void main(void)
{
vec3 Normal = normalize(pass_Normal);
vec3 light_Direction = -normalize(light.direction);
vec3 camera_Direction = normalize(-pass_Position);
vec3 half_vector = normalize(camera_Direction + light_Direction);
float fndotl = dot(Normal, light_Direction);
float shadowFactor = CalcShadowFactor(lightspace_Position);
float diffuse = max(0.0, fndotl) * shadowFactor + 0.2;
vec3 temp_Color = vec3(diffuse);
float specular = max( 0.0, dot( Normal, half_vector) );
float shadowFactor = 1.0;
if (fndotl > 0.0)
shadowFactor = CalcShadowFactor(lightspace_Position);
if(shadowFactor > 0.59){
float fspecular = pow(specular, 128.0);
temp_Color += fspecular;
}
out_Color = vec4(shadowFactor * texture(inSampler, TexCoord).xyz * temp_Color, 1.0);
}