auth.userId shows opaque even though authorized

That’s because auth.userID is always an opaque id, as per the documentation on what is returned by the onAuthorized() function https://dev.twitch.tv/docs/extensions/reference/#helper-extensions

To get the user id once you have requested the ID share like you have you need to decode the JWT and you’ll get an object as described by the JWT Schema in the docs https://dev.twitch.tv/docs/extensions/reference/#jwt-schema

It’s within that token you’ll find the user_id field which has their Twitch ID in it. For users who haven’t accepted the ID sharing this field will not be present.