Steam API 身份验证

2023-12-12

在开始之前,我要声明我对 OpenID 一无所知。我什至不想做 OpenID 的用途,但我想人们会提到它,但这不是我想要的。

我有软件。该软件要求用户在注册时提供其 Steam 用户名。他们不通过 Steam 登录,只是提供他们的用户名,以便其他人知道他们的 Steam 用户名。所以不需要OpenID。

我知道,我可以简单地添加一个文本字段,让他们列出他们的 Steam 用户名,然后就到此为止了。然而,这样做,人们几乎可以输入他们想要的任何蒸汽用户名并完成。相反,我希望能够确认他们的用户名。

理想情况下,应该有一个“验证 Steam 帐户”按钮。人们点击它,它会弹出一个 Steam 登录表单。人们登录,然后 Steam 返回他们的用户名(可能还有一些额外的数据,例如他们的头像)。最好的方法是什么?


需要 OpenID。这就是 Valve 根据他们的情况使用的方法文档.

您没有提到您的应用程序是用什么编写的,所以我只能猜测您是通过网页执行此操作的。在这种情况下,我建议使用LightOpenID图书馆。从这里开始,此示例代码应该能够帮助您入门。

<?php
require 'includes/lightopenid/openid.php';
$_STEAMAPI = "YOURSTEAMAPIKEY";
try 
{
    $openid = new LightOpenID('http://URL.TO.REDIRECT.TO.AFTER.LOGIN/');
    if(!$openid->mode) 
    {
        if(isset($_GET['login'])) 
        {
            $openid->identity = 'http://steamcommunity.com/openid/?l=english';    // This is forcing english because it has a weird habit of selecting a random language otherwise
            header('Location: ' . $openid->authUrl());
        }
?>
<form action="?login" method="post">
    <input type="image" src="http://cdn.steamcommunity.com/public/images/signinthroughsteam/sits_small.png">
</form>
<?php
    } 
    elseif($openid->mode == 'cancel') 
    {
        echo 'User has canceled authentication!';
    } 
    else 
    {
        if($openid->validate()) 
        {
                $id = $openid->identity;
                // identity is something like: http://steamcommunity.com/openid/id/76561197960435530
                // we only care about the unique account ID at the end of the URL.
                $ptn = "/^http:\/\/steamcommunity\.com\/openid\/id\/(7[0-9]{15,25}+)$/";
                preg_match($ptn, $id, $matches);
                echo "User is logged in (steamID: $matches[1])\n";

                $url = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=$_STEAMAPI&steamids=$matches[1]";
                $json_object= file_get_contents($url);
                $json_decoded = json_decode($json_object);

                foreach ($json_decoded->response->players as $player)
                {
                    echo "
                    <br/>Player ID: $player->steamid
                    <br/>Player Name: $player->personaname
                    <br/>Profile URL: $player->profileurl
                    <br/>SmallAvatar: <img src='$player->avatar'/> 
                    <br/>MediumAvatar: <img src='$player->avatarmedium'/> 
                    <br/>LargeAvatar: <img src='$player->avatarfull'/> 
                    ";
                }

        } 
        else 
        {
                echo "User is not logged in.\n";
        }
    }
} 
catch(ErrorException $e) 
{
    echo $e->getMessage();
}
?>

使用此功能,它将向用户显示 Steam 登录 ID 按钮。单击后,会将用户重定向到 Steam 社区登录页面。登录后,用户将重定向回您在LightOpenID构造函数。如果用户已通过验证,它将从返回值中提取唯一的玩家 ID。返回值看起来像http://steamcommunity.com/openid/id/76561197960435530,你只需要76561197960435530 part.

此时您可以查询Steam来获取玩家信息。在提供的示例中,查询用户并显示基本玩家信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Steam API 身份验证 的相关文章

  • Steam API 身份验证

    在开始之前 我要声明我对 OpenID 一无所知 我什至不想做 OpenID 的用途 但我想人们会提到它 但这不是我想要的 我有软件 该软件要求用户在注册时提供其 Steam 用户名 他们不通过 Steam 登录 只是提供他们的用户名 以便
  • Facebook 是 openid 提供商吗?

    我对 facebook 以及 facebook 是否是像谷歌这样的 openid 提供商感到困惑 根据这个链接 http developers facebook com blog post 246 facebook 是一个 openid 依
  • 带 www 或不带 www 的默认 URL 有何优缺点?

    我们需要将默认 URL 设置为唯一名称 如果是 www 则没有前缀 反之亦然 因此要做出的决定是坚持使用 www 或不使用前缀 没有为所有子域设置前缀 cookie 它还有什么其他缺点 还是好处 基本上我们需要 OpenID 这个 因为如果
  • DotNetOpenAuth 和 Facebook

    我正在尝试使用 DotNetOpenAuth 来实现某些 Web 单点登录功能 我得到了适用于 Google 和 Yahoo 的示例 但在 Facebook 上却遇到了困难 我正在使用 CTP 4 0 0 11165 并遵循中的示例这个问题
  • 通过 Perl 和 Net::OpenID::Consumer 对 Google Apps 进行 OpenID 身份验证失败

    我在 Google 的应用程序集成支持论坛上提出了这个问题 但得到的回复为零 也许这里有人可以帮助引导我走向正确的方向 我正在尝试将 Perl 应用程序与 Google Apps 集成 但在 OpenID 身份验证方面遇到了一些问题 我一直
  • 如何使用 OAuth2 / OpenID Connect 与 UserService?

    我正在 Google App Engine 上运行多个应用程序 我使用 UserService 进行身份验证 以便能够代表用户发送电子邮件等 并使用 OAuth2 进行 API 授权 我现在正尝试在 Google Apps Marketpl
  • 对 Ruby on Rails 应用程序的 OpenID 支持

    在 Ruby on Rails 应用程序中启用 OpenID 登录的最新技术是什么 这是一个社区 wiki 其中包含该问题的最新答案 真实逻辑 最先进的身份验证解决方案似乎是真实逻辑 http github com binarylogic
  • 如何使 Uri.EscapeDataString 符合 RFC 3986

    Uri 类默认为 RFC 2396 对于 OpenID 和 OAuth 我需要与 RFC 3986 一致的 Uri 转义 来自System Uri 类文档 http msdn microsoft com en us library syst
  • http://schema.openid.net/contact/email 和 http://axschema.org/contact/email 之间的区别

    何时使用http schema openid net contact email http schema openid net contact email以及何时使用http axschema org contact email http
  • openID 的安全性如何?

    这是可用于高度安全信息的东西还是应该被单站点身份验证系统绕过 这可能是一个愚蠢的问题 因为它听起来不安全 但我想要一些建议 OpenID本身的安全性并不亚于传统的用户名 密码登录 显然 您将大部分安全性委托给了提供商 例如暴力破解预防 密码
  • Google App Engine:使用自定义身份验证或 Open ID 时的端点身份验证

    我最近开始使用 Google App Engine 我打算使用 Flask 来提供网页和 Endpoints API 最好使用 Endpoints Proto Datastore 来处理其他所有内容 从一开始 GAE 上的非 Google
  • 如何在 Jenkins 中创建用户并将其添加到组中进行身份验证?

    我选择使用 Jenkins 自己的用户数据库 安全领域进行用户登录 因为我无法在公司中使用 LDAP 当您决定将主机名或端口号更改为其他名称时 Google 的 OpenID 就会出现问题 为了安全起见 我使用 基于项目的矩阵授权策略 模式
  • 如何为 mvc 应用程序中的所有控制器启用 ssl

    我有一个 MVC 5 应用程序 并且安装了 ssl 证书 现在正在使用 https 连接 但在我的代码中 我必须在 homecontroller 上设置 requirehttps 属性 如下所示 RequireHttps public cl
  • 哪个 django OpenID 库可与新的 Google OpenID 配合使用

    由于 Google 弃用了 OpenID 2 0https developers google com accounts docs OpenID2 https developers google com accounts docs Open
  • 在 PhoneGap 平台上使用 OpenID

    我目前正在使用 PhoneGap 开发一个应用程序 我的应用程序使用 OpenID 来验证用户身份 成功验证用户身份后 它应该返回到我的应用程序 我已使用 location href 将页面重定向到本地地址 例如 iOS 应用程序的 fil
  • VBScript 发送键“

    我有一个 VBScript 可以取消订阅所有 Steam 创意工坊对象 Code Set WshShell WScript CreateObject WScript Shell WshShell AppActivate Steam Comm
  • keycloak - 用户经过身份验证后出现 CODE_TO_TOKEN_ERROR

    我正在使用 nodeJS keycloak 适配器 到目前为止我的客户端应用程序已重定向到 keycloak 登录 尝试登录时 我在 keycloak 日志中收到如下错误 12 07 12 341 警告 org keycloak event
  • 在 .NET 中使用 FB Connect / Google OAuth 登录

    我希望允许我的用户使用我的登录系统 FB Connect 或 Google Login 登录我的网站 我不想仅使用大型库 如 dotnetOpenAuth 来实现这两个选项 那么我应该如何实现这一点 其他问题 我应该如何将 FB Googl
  • OpenID 登录机制 - 保持登录状态

    我正在用 PHP 开发一个网站 并尝试使用 OpenID 进行登录机制 我想要类似于 StackOverflow 的行为 我的意思是 每当我打开 stackoverflow 时 我就已经登录了 我在 StackOverflow 上发现了两个
  • 登录成功后身份服务器不重定向

    我正在尝试使用 MVC 客户端设置 IdentityServer4 一切工作正常 直到我想添加 ASP 身份 当我添加代码来使用 SQL Server 和 Identity 时 成功登录后 Identity 服务器不会将我重定向回客户端 而

随机推荐

  • 在循环 R 中迭代时从函数返回值

    我已经远离了 R 中的函数 但认为这是更好的做法 现在我有这个问题 我写我的函数 myFunction lt function tab takes tabular input inP lt c for x in 1 dim tab 1 it
  • 增强 PowerShell 脚本以查询 AsBuiltReport 框架内 GPO 上的端口

    我得到了当前的脚本 来自这个答案 我想改进 如果在入站方向内启用并允许这些端口 则脚本应检索所需的端口 操作 启用 方向的过滤器工作完美 但我仍然需要本地端口的过滤器仅检索定义端口内的唯一结果 但仍显示其他端口 附加问题 如何将机器的 IP
  • 长按监听器 ListActivity 类

    我有一个使用 ListView 的应用程序 我设置了 onListItemClick 事件来查看有关联系人的详细信息 我想实现 onLongListItemClick 来显示一个对话框 但我不知道为什么它不起作用 我的意思是什么也没有发生
  • Visual Studio Code c++11 扩展警告

    我正在学习 C 并且正在使用 Mac 版 Visual Studio Code 我使用 Code Runner 来运行我的程序 我的问题是 当我使用 c 11 中的某些内容 如 auto 进行变量声明时 Visual Studio Code
  • 如何自定义UITabBarController的“更多”按钮?

    我将 UITabBarController 添加为 RootView 并且我还知道当您有超过 5 个 tabBarItem 时 会自动添加 更多 按钮 所以一切都很完美 但我有两个问题 1 如何在 更多 TabBarItem上设置图像 2
  • Mapbox GL JS 在图层中的特定功能上设置 Paint 属性

    我使用 Mapbox Studio 作为地图和样式的基础 然后使用 HTML 来实现其他地图功能 其中一项功能是在悬停或鼠标输入时更改图标不透明度 当您直接在 HTML 中创建它时 我检查了其他示例和所有其他参考功能 我设法改变不透明度 但
  • 队列不自然排序[重复]

    这个问题在这里已经有答案了 可能的重复 为什么java中的PriorityQueue会出现这种奇怪的顺序 请参阅下面的代码 public static void main String args Queue
  • 使用 MIPS 汇编中的逻辑移位乘以 2 的幂

    有人可以指导我如何在 MIPS 汇编中使用移位来制作乘法代码吗 我不明白数字 2 n 如何帮助我使用奇数被乘数进行乘法 我目前有这段代码 我正在尝试制作一个计算器 text li v0 4 la a0 ask 1 syscall li v0
  • 使用 PHP 抓取完整图像 src

    我正在尝试用 php 抓取 img src 我可以很好地获取 src 但是如果 src 不包含完整路径 那么我无法真正重用它 有没有办法使用php获取图像的完整路径 如果使用右键菜单 浏览器可以获取它 IE 如何获取包含以下两个示例之一中的
  • Django 开发服务器不断注销

    我在 settings py 中将 SESSION COOKIE AGE 设置为 360 但是在我开发服务器时它总是将我注销 为什么会发生这种情况以及如何防止这种情况 Thanks 这是我的设置 py 设置 py Django settin
  • 适用于 iPhone 的 MQTT 客户端

    我正在尝试遵循这个blog用于为 iPhone 构建推送服务 该博客使用 Android 作为工作平台 但它也可以迁移到 iPhone 前提是我在 Objective C 中获得了 MQTT 客户端 但我在任何地方都找不到 我最接近的是 我
  • 使用 CsvHelper 从单个 csv 文件读取多个类

    我最近一直在使用 Josh Close 的 CsvHelper 来解析 CSV 文件 我非常喜欢用于类映射的流利 api 我正在尝试映射包含多种记录类型的 csv 文件 文件结构是 C Comment Timestamp I Class1
  • 在 Linux 中使用 C、C++ 发出系统命令

    我知道在 DOS Windows 应用程序中 您可以使用以下行从代码发出系统命令 system pause or system myProgram exe 来自 stdlib h 是否有类似的 Linux 命令 如果有 我会在哪个头文件中找
  • Django 模型类和自定义属性

    今天我遇到了一个奇怪的问题 我在 Django 中有一个模型类 并向其中添加了一个自定义属性 该属性不应保存到数据库中 因此在模型结构中不具有代表性 class Category models Model groups models Man
  • 如何在 Bootstrap 中将导航栏内容居中

    我正在学习 Bootstrap 4 导航栏 但我无法清楚地理解如何在导航栏中定位对象我希望将搜索框放置在导航栏的中心并在右侧放置一个按钮 但我只能做到这一点导航栏没有得到居中对齐 div class collapse navbar coll
  • QTabBar奇怪的线条不消失

    I have created this interface 我的问题是 如何使用我的样式表摆脱那条过时的行 黑框 objectname mainTabBarWidget QWidget 垂直布局 它有固定的高度 38px 并从左到右包含这些
  • Order by Clause 与访问中的 unique 冲突?

    请帮助我解决这个问题 因为我无法解决这个问题 当尝试执行此语句时 SELECT distinct grade FROM tblStudents ORDER BY Val grade grade 访问告诉我ORDER BY clause Va
  • javaFX 进度条更新崩溃

    我的应用程序中出现了 JavaFX jdk 1 8 0 91 上的一个非常严重的错误 其中显示并更新了几个进度条 随机或同时 有时 特别是当进度条被填满时 它有一个进度条的样式类 但有时也在什么都没有的情况下 软件块和我有这个跟踪出现几次
  • 实现解析器函子

    为 Brent Yorgey 的 2013 年 UPenn 工作class家庭作业 如下newtype exists newtype Parser a Parser runParser String gt Maybe a String 我正
  • Steam API 身份验证

    在开始之前 我要声明我对 OpenID 一无所知 我什至不想做 OpenID 的用途 但我想人们会提到它 但这不是我想要的 我有软件 该软件要求用户在注册时提供其 Steam 用户名 他们不通过 Steam 登录 只是提供他们的用户名 以便