Replies: 2 comments 1 reply
-
Also, i don't exactly know how gevent works, but it looks like you might need to monkey patch by default with this authentication stuff. I could be reading that wrong, though, but if i am not, that is likely something to consider |
Beta Was this translation helpful? Give feedback.
0 replies
-
Yes, Valve has change quite a few bits. I have a patch set to update authentication across the package and implement the new flows, but is still incomplete, I'm aiming to pushing some time these month if time allows. |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
As of March 2023, Valve changed how authentication works, and you can only use Client Login for a single session. They removed a client logon key messsage, which you could previously get a token from to stay logged in without user prompts. The new method is to use "CAuthentication", which is a series of Unified Messages (or Service Messages, if you prefer). It's essentially OAuth2, but through the network instead of a web api.
It's currently possible to do this in your code using a very specific set of
send_um
orsend_um_and_wait
, but these aren't something a normal person could stumble on. i was wondering if you would want to implement this in a more elegant manner. For reference, SteamKit added an entire namespaceSteamKit.Authentication
and several helper methods:GetPasswordRSAPublicKeyAsync
,BeginAuthSessionViaCredentialsAsync
, andPollingWaitForResultAsync
, which can be used to get an access and refresh token. The sample code is at https://github.com/SteamRE/SteamKit/tree/master/Samples/1a.AuthenticationI mention this because I am doing this very thing in the GOG Galaxy Integration. Unfortunately, our code base is terrible (i'm working on a refactor, but prioritizing getting it working), and we use ayncio instead of gevent, so i couldn't just do a PR with what we have, but i could provide instructions on how to do it. I suppose i could bite the bullet and implement it here (learn your code, and then fork, implement, and PR), but I don't know how you'd want to implement it here, if you even want to at all. Idk if you want to support a persistent login, if that opens some sort of pandora's box or whatever.
As for the how, i can explain more in IRC or whatever, or you can look at steamkit's implementation, though i must warn it's obfuscated in some relatively clever ways. I actually missed the initial "Client Hello Message" and only caught it from a merge comment.
Beta Was this translation helpful? Give feedback.
All reactions