PGP is not ideal for web service authentication because the authentication would involve the server issuing a challenge and the client returning a signed response. Now how will the user provide the signed response (I understand from your question that the client is a browser)? Your options are:
Provide a UI on the web page with some Javascript library that takes the private key and signs the response. This approach should be objected by users because it is typically not safe to load your private key to a web page.
Copy the unsigned response from the browser to another client, sign it, and then copy the signed response to the browser. This approach will surely be objected by users who will hate you for making a service with bad usability.
So if you have any other choice you're probably better off not using PGP. If you must use PGP then the first option is probably the only one that will actually work. That's similar, for example, to the way the AWS management console works, although in their case they don't use the keys for authentication. One rather calls their web services with an equivalent of a username + the request parameters, and signs the message with their private key.
So if you have the flexibility perhaps you could skip the challenge part by issuing the user a "username"; this could be for example a hash of the PGP public key. The user would then send the username as one of the service arguments and then sign the message, similar to how AWS works. The server then authenticates the user by retrieving the public key based on the username, and using the public key to validate the signature. Note that this method still requires the user to load the private key to the browser.