身份认证

身份认证API提供了一些工具来认证Steam用户的身份以及判断用户是否拥有应用的所有权。

Note: 身份认证API需要一个额外的动态库。 请从Steamworks SDK (<steam_sdk-path>/public/steam/lib/ 目录)复制 sdkencryptedappticket.dll/libsdkencryptedappticket.dylib/libsdkencryptedappticket.so 文件到应用文件夹 <greenworks>/lib 中。

var greenworks = require('./greenworks');

greenworks.init();

greenworks.getEncryptedAppTicket('test_content', function(ticket) {
    console.log("ticket: " + ticket.toString('hex'));
    // Specify the secret key.
    var key = new Buffer(32);
    // TODO: you must initialize Buffer key with the secret key of your game here,
    // e.g. key = new Buffer([0x0a, ..., 0x0b]).
    assert(key.length == greenworks.EncryptedAppTicketSymmetricKeyLength)
    var decrypted_app_ticket = greenworks.decryptAppTicket(ticket, key);
    if (decrypted_app_ticket) {
        console.log(greenworks.isTicketForApp(decrypted_app_ticket,
            greenworks.getAppId()));
        console.log(greenworks.getTicketAppId(decrypted_app_ticket));
        console.log(greenworks.getTicketSteamId(decrypted_app_ticket));
        console.log(greenworks.getTicketIssueTime(decrypted_app_ticket));
    }
}, function(err) { throw err; });

1. 获取身份验证会话ticket

greenworks.getAuthSessionTicket(success_callback, [error_callback])

  • success_callback Function(ticket)

    • ticket Object:

      • ticket Buffer: ticket 的值。

      • handle Integer: 该ticket返回的 handle

  • error_callback Function(err)

获取要发送给希望对您进行身份验证的实体的ticket。

ticket buffer 可以像 ticket.toString('hex') 这样在 Web API ISteamUserAuth/AuthenticateUserTicket 中被使用,这样就可以从游戏服务器安全的获得授权的Steam ID。 如果票证未被使用,则需要使用 handle 来将ticket作废。

注意一旦创建ticket的进程终止了,那么生成出来的ticket就无效了。 所以如果您想要在某些临时进程中创建ticket,请确保这些ticket在身份验证结束前保持有效!

2. 取消身份ticket

greenworks.cancelAuthTicket(ticket_handle)

  • ticket_handle Integer: 该ticket返回的 handle

将请求的session ticket 作废。

3. 获取加密应用ticket

greenworks.getEncryptedAppTicket(user_data, success_callback, [error_callback])

  • user_data String: 将要加密到ticket中的任意值。将会以utf-8编码存储在ticket中。

  • success_callback Function(encrypted_ticket)

    • encrypted_ticket Buffer: 加密过的ticket。

  • error_callback Function(err)

加密ticket可以用来从客户端获取认证的Steam Id,而无需向Steam的API服务器发送网络请求。 这些ticket可以通过加密应用的ticket秘钥来进行解密。 在解密之后,可以通过Steamworks SDK中提供的加密应用ticket库,从ticket中查看用户的Steam ID、App ID、以及 VAC ban状态。

4. 解密应用ticket

greenworks.decryptAppTicket(encrypted_ticket, decryption_key)

  • encrypted_ticket Buffer: 加密过的ticket。

  • decryption_key Buffer: 用于解密的秘钥。其长度应该是 greenworks.EncryptedAppTicketSymmetricKeyLength

使用解密key可以堆加密过的应用ticket进行解密。 如果解密成功则会返回一个 Buffer;否则会返回 Null

5. 是该应用的ticket

greenworks.isTicketForApp(decrypted_ticket, app_id)

  • decrypted_ticket Buffer: 解密过的ticket。

  • app_id Integer: 这个app的id。

返回一个 Boolean 值,表示解密ticket是否适用于该应用。

6. 获取ticket的发布时间

greenworks.getTicketIssueTime(decrypted_ticket)

  • decrypted_ticket Buffer: 解密过的ticket。

返回一个 Integer,表示该ticket的发布时间。

7. 获取ticket对应的SteamId

greenworks.getTicketSteamId(decrypted_ticket)

  • decrypted_ticket Buffer: 解密过的ticket。

返回一个 SteamID 对象,表示该ticket的steam id。

8. 获取ticket的app id

greenworks.getTicketAppId(decrypted_ticket)

  • decrypted_ticket Buffer: 解密过的ticket。

返回一个 Integer ,表示该ticket的app id。