Steps 3 and 4 can be combined into a single request to the Helix Get Users endpoint.
If you use the User Access Token as the Bearer token to that endpoint, and not provide either id or login querystring params, it’ll return the user doc associated with the access token.
The returned results from that endpoint include the users ID, username, display name, and profile url as well as some other details so should be what you are after…
Alternatively, if you want want to use the OIDC code flow for authentication, you can use the claims param as documented to also get the info you’re after as part of the auth request.