Autenticación de Firebase (JWT) con .NET Core

Estoy desarrollando una API simple que maneja la autenticación realizada por Firebase, para ser utilizada más tarde con los clientes de Android.

Entonces, en la consola Firebase, habilité los métodos de inicio de sesión de Facebook y Google y creé una página html de muestra que puedo usar para probar el método de inicio de sesión; esta siguiente función se llama mediante un botón:

function loginFacebook() {
        var provider = new firebase.auth.FacebookAuthProvider();
        var token = "";
        firebase.auth().signInWithPopup(provider).then(function (result) {
            var token = result.credential.accessToken;
            var user = result.user;
            alert("login OK");
            user.getToken().then(function (t) {
                token = t;
                loginAPI();
            });
        }).catch(function (error) {
            var errorCode = error.code;
            var errorMessage = error.message;
            alert(errorCode + " - " + errorMessage);
        });
    }

a continuación, uso el token y lo envío a mi API con una simple llamada ajax desde jQuery aquí:

function loginAPI()
{
    $.ajax({
        url: "http://localhost:58041/v1/Users/",
        dataType: 'json',
        type: 'GET',
        beforeSend: function (xhr) {
            xhr.setRequestHeader("Accept", "application/json");
            xhr.setRequestHeader("Content-Type", "application/json");
            xhr.setRequestHeader("Authorization", "Bearer " + token);
        },
        error: function (ex) {
            console.log(ex.status + " - " + ex.statusText);
        },
        success: function (data) {
            console.log(data);
            return data;
        }
    });
}

Siguiente parada: el backend de API, escrito con .NET Core.

En el inicio, configuré la autenticación JwtBearer (paqueteMicrosoft.AspNetCore.Authentication.JwtBearer):

app.UseJwtBearerAuthentication(new JwtBearerOptions
{
    AutomaticAuthenticate = true,
    IncludeErrorDetails = true,
    Authority = "https://securetoken.google.com/PROJECT-ID",
    TokenValidationParameters = new TokenValidationParameters
    {  
        ValidateIssuer = true,
        ValidIssuer = "https://securetoken.google.com/PROJECT-ID",
        ValidateAudience = true,
        ValidAudience = "PROJECT-ID",
        ValidateLifetime = true,
    },
});

Y aquí está el código del controlador, con el[Authorize] atributo:

[Authorize]
[Route("v1/[controller]")]
public class UsersController : Controller
{
    private readonly ILogger _logger;
    private readonly UserService _userService;

    public UsersController(ILogger<UsersController> logger, UserService userService)
    {
        _logger = logger;
        _userService = userService;
    }

    [HttpGet]
    public async Task<IList<User>> Get()
    {
        return await _userService.GetAll();
    }
}

La respuesta API es 200 OK (HttpContext.User.Identity.IsAuthenticated estrue dentro del controlador), pero creo que no debería. Mi problema es que no estoy completamente seguro de que esto sea seguro.

¿Cómo se está comprobando la parte de firma del token JWT? Vi muchas muestras de código que mencionan el algoritmo x509 o RS256, ¿dónde encajan con esto? No debería verificar con algún tipo de certificado o clave privada con elIssuerSigningKey oTokenDecryptionKey desde elTokenValidationParameters ¿clase? ¿Qué me estoy perdiendo?

Fuentes de conocimiento relevantes sobre el tema:

https://blog.markvincze.com/secure-an-asp-net-core-api-with-firebase/SPA: autenticación de Firebase y .Net WebApi 2https://stormpath.com/blog/token-authentication-asp-net-corehttps://jwt.io/https://firebase.google.com/docs/auth/admin/verify-id-tokens

Respuestas a la pregunta(3)

Su respuesta a la pregunta