This question already has an answer here:
I want to implement a client-side wallet where the transaction is generated and signed on the browser, and sent to the server which is running a geth node. Apparently ethereumjs-tx does what I want for the client side, but it needs the private key for signing.
Therefore, I want to ask the user to supply their UTC key file and their password on the browser, and then, -I guess- I need to derive their private key with these two pieces of information. But I have no idea how to do that.