The difference can be explained with a simple analogy to confirming your phone number in a sign up flow.
If you enter a phone number as part of a website registration flow, the website doesn’t actually know if you own that phone number. You can just as easily enter someone else’s phone number and register on their behalf.
Hence, websites text you to confirm that you have access to your phone, making sure you are who you say you are. You have to enter a code and prove you have access to your phone number.
The same holds true for wallets. Connecting is similar to entering a phone number. Signing is similar to entering the confirmation code you received on that number.
In the sign in case, the way to do it is by generating a cryptographic nonce for you to sign with your private key. That signature proves without a doubt that you are indeed the owner of your wallet.
Connecting vs signing in with your wallet
Should I implement "connect wallet" or "sign in with wallet" (asking the user to sign a message) functionality? In the following blog post, we wanted to quickly explore the difference between the two. Introduction Historically, distributed apps have mostly used "connect wallet" (a method for providing the dapp with the user's public wallet address).