Login with Steam OpenId(oidc-client-js)

风格不统一 提交于 2020-05-09 06:30:48

问题


I've done auth with google when client auth, receive token_id, send it to server and server retrieve client account info base of that token_id. It was pretty easy because it was documented. Now I try to do with Steam but literally I have 4 rows about OpenID in steam docs. I start using an openID browser lib oidc-client-js but steam docs doesn't help me. The openID lib require this fields:

  • authority
  • client_id
  • redirect_uri
  • response_type
  • scope

Steam docs offer just the provider, key and domain name and I really don't know where to start.

Just download an OpenID library for your language and platform of choice and use http://steamcommunity.com/openid as the provider. The returned Claimed ID will contain the user's 64-bit SteamID. The Claimed ID format is: http://steamcommunity.com/openid/id/

I get CORS Header problem because I use localhost and not a secure connection and I think I need to configure additional fields in oidc-client-js:

  • metadata
  • signingKeys

Any help will be appreciated.


回答1:


tl;dr: Steam is not an OpenID Connect provider

I got the exact same problem.

I tried running chrome with CORS disabled to see if it would work, I got an error from oidc-client:

SyntaxError: Unexpected token < in JSON at position 0  
    at JSON.parse (<anonymous>)  
    at XMLHttpRequest.s.onload (oidc-client.min.js?3809:1)

Which is easily understandable because https://steamcommunity.com/openid/.well-known/openid-configuration looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)">
<XRD>
    <Service priority="0">
        <Type>http://specs.openid.net/auth/2.0/server</Type>        
        <URI>https://steamcommunity.com/openid/login</URI>
    </Service>
</XRD>
</xrds:XRDS>

Which is obviously not JSON.

The URL in the Type balise redirects to http://openid.net/specs/openid-authentication-2_0.html, which can be found in the obsolete section of the OpenID specifications page.

Additionally, you can find in the OpenID Connect Discovery specification page that

OpenID Providers supporting Discovery MUST make a JSON document available at the path formed by concatenating the string /.well-known/openid-configuration to the Issuer.

Which corroborate that the .wellknown/openid-configuration file of Steam OpenID endpoint was not made for OpenID Connect.

So I think it's safe to say that Steam is stuck to OpenID 2.0 and is not an OpenID Connect provider.

Now I have to look for an OpenID 2.0 js client, or switch for Google Sign-In.




回答2:


You can use my Steam OpenID Connect Provider: https://github.com/ImperialPlugins/steam-openid-connect-provider

It is also available as a docker image on DockerHub: https://hub.docker.com/r/imperialplugins/steam-openid-connect-provider

This allows you to use OpenID Connect with Steam.



来源:https://stackoverflow.com/questions/48795552/login-with-steam-openidoidc-client-js

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!