owin oauth enviar parámetros adicionales

Estoy seguro de que esto es posible pero no estoy seguro de cómo lograrlo. Tengo una implementación OWIN OAUTH que actualmente acepta el nombre de usuario y la contraseña de los usuarios y los autentica en una base de datos. Me gustaría extender esto para pasar un SmartCard Uid para admitir el inicio de sesión único con una SmartCard.

¿Puedo pasar parámetros adicionales en el inicio de sesión de OWIN? De ser así, ¿cómo? La premisa básica es que un usuario puede iniciar sesión con una combinación de nombre de usuario / contraseña o un SmartCard uid (si pasa un SmartCard uid y se encuentra en la base de datos, la aplicación iniciará sesión en el usuario)

Actualmente estoy de pasousername, password ygrant_type y me gustaría agregaruid a esa lista y recoger eso en el miAuthorizationServiceProvider.

puedo verUserName, Password yClientId sobre elOAuthGrantResourceOwnerCredentialsContext pero no puedo ver ninguna otra propiedad que respalde lo que estoy tratando de lograr.

Esto es lo que tengo actualmente en mi proveedor de servicios

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

        var user = await this._userService.FindUser(context.UserName, context.Password);

        if (user == null)
        {
            context.SetError("invalid_grant", "The user name or password is incorrect.");
            return;
        }

        var identity = new ClaimsIdentity(context.Options.AuthenticationType);
        identity.AddClaim(new Claim(ClaimTypes.Sid, user.Id.ToString()));
        identity.AddClaim(new Claim(ClaimTypes.Role, "user"));
        identity.AddClaim(new Claim("sub", context.UserName));

        var secretKeyBytes = Encoding.UTF8.GetBytes(user.PasswordHash);
        var props =
            new AuthenticationProperties(
                new Dictionary<string, string>
                    {
                        { "dm:appid", user.Id.ToString() },
                        { "dm:apikey", Convert.ToBase64String(secretKeyBytes) }
                    });

        var ticket = new AuthenticationTicket(identity, props);
        context.Validated(ticket);
    }

Quiero poder obtener Uid del contexto también, pero no puedo ver de ninguna manera lograr esto, cualquier ayuda es muy apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta