A identidade do núcleo do asp.net extrai e salva tokens de login externos e adiciona declarações à identidade local

Eu sou um noob stackoverflow, por isso, vá com calma se estiver fazendo isso errado.

Estou usando o núcleo do asp.net com o modelo de identidade principal padrão (contas locais).

Eu consertei como adicionar reivindicações ao usuário principal quando eles se conectam localmente da seguinte maneira

[HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Login(LoginInputModel model)
    {
        if (ModelState.IsValid)
        {
            // This doesn't count login failures towards account lockout
            // To enable password failures to trigger account lockout, set lockoutOnFailure: true

            var user = await _userManager.FindByNameAsync(model.Email);

            await _userManager.AddClaimAsync(user, new Claim("your-claim", "your-value"));

E descobri como obter reivindicações retornadas do logon externo, mas não consigo descobrir como as adicionaria antes que o principal do usuário fosse criado na função ExternalLoginCallback

public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null)
    {
        if (remoteError != null)
        {
            ModelState.AddModelError(string.Empty, $"Error from external provider: {remoteError}");
            return View(nameof(Login));
        }

        var info = await _signInManager.GetExternalLoginInfoAsync();
        if (info == null)
        {
            return RedirectToAction(nameof(Login));
        }
        else {
            // extract claims from external token here
        }

        // assume add claims to user here before cookie gets created??

        // Sign in the user with this external login provider if the user already has a login.
        var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false);
        if (result.Succeeded)

Suponho que a função _signInManager.ExternalLoginSignInAsync funcione de maneira semelhante ao logon local _signInManager.PasswordSignInAsync no sentido em que, uma vez chamado, o cookie será criado. Mas eu simplesmente não tenho certeza.

Essencialmente, o que pretendo alcançar é compreender como adicionar declarações personalizadas ao cookie criado independentemente de como efetuar login no usuário (local ou externo) e como persistir essas declarações no banco de dados, se necessário.

Estou planejando fazer algum trabalho em que, se eu tiver um login de usuário usando, digamos, google auth, preciso salvar esse access_token do google, porque desejo acessar as APIs do Google posteriormente com ele. Portanto, preciso poder incluir esse access_token no Principal de Usuário que é criado, e espero que o cookie tenha uma reivindicação que eu possa usar também no front-end.

Isso pode estar fora de escopo nesta questão, mas eu também gostaria que o token do google expire, de alguma forma, como usar o token de atualização e obter um novo ou forçar o usuário a se conectar novamente.

Qualquer ajuda sobre isso seria super apreciada, eu realmente tentei entender isso sem postar esta pergunta no stackoverflow. Eu li muitos artigos com muitas informações úteis, mas não fornece as respostas que esta pergunta específica está perguntando. Então, muito obrigado antecipadamente.

Felicidades

questionAnswers(1)

yourAnswerToTheQuestion