I’ve compared the request headers for both the characters endpoint and the assets endpoint and they are identical aside from the “:path” header. Which is as it should be as far as I know.
Best practice is to just request the scopes you need. Alternative is to ignore just the scopes that do nothing, which will bring your token length to just under 4096:
//'publicData', // irrelevant
//'esi-wallet.read_corporation_wallet.v1', // invalid
//'esi-bookmarks.read_character_bookmarks.v1', // bookmarks api doesnt work
//'esi-characters.read_chat_channels.v1', // there is no chat api
//'esi-bookmarks.read_corporation_bookmarks.v1', // bookmarks api doesnt work