Autenticação Firebase (JWT) com .NET Core

Estou desenvolvendo uma API simples que lida com autenticação feita pelo Firebase - para ser usada posteriormente com clientes Android.

Portanto, no console do Firebase, ativei os métodos de login do Facebook e do Google e criei uma página html de amostra que posso usá-la para testar o método de login - essa próxima função é chamada por um botão:

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);
        });
    }

Em seguida, uso o token e o envio à minha API com uma simples chamada ajax do jQuery aqui:

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;
        }
    });
}

Próxima parada: o back-end da API - escrito com o .NET Core.

Sob a inicialização, configurei o JwtBearer Auth (pacoteMicrosoft.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,
    },
});

E aqui está o código do controlador - com o[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();
    }
}

A resposta da API é 200 OK (HttpContext.User.Identity.IsAuthenticated étrue dentro do controlador), mas acho que não deveria. Meu problema é que não tenho certeza absoluta de que isso seja seguro.

Como isso está verificando a parte da assinatura do token JWT? Eu vi muitos exemplos de código mencionando o algoritmo x509 ou RS256, onde eles se encaixam nisso? Não deve verificar algum tipo de certificado ou chave privada com oIssuerSigningKey ouTokenDecryptionKey deTokenValidationParameters classe? O que estou perdendo?

Fontes de conhecimento relevantes sobre o problema:

https://blog.markvincze.com/secure-an-asp-net-core-api-with-firebase/SPA - Firebase e autenticação .Net WebApi 2https://stormpath.com/blog/token-authentication-asp-net-corehttps://jwt.io/https://firebase.google.com/docs/auth/admin/verify-id-tokens

questionAnswers(3)

yourAnswerToTheQuestion