使用第三方服务进行自定义身份验证

用户进行身份验证时,有时用户的凭据和元数据可能存储在第三方服务中。在这些情况下,您可以连接到现有的第三方API来验证用户并检索其元数据。然后可以使用此元数据在Nakama中创建关联用户,从而有效地将其外部用户ID/用户名链接到Nakama用户。

本指南将演示两种场景,在这些场景中,使用Nakama的自定义身份验证功能允许对存储在第三方服务中的用户进行身份验证。

定制令牌交换身份验证 #

在本例中,我们的用户详细信息存储在第三方服务中,该服务公开了一个RESTful API,作为响应,我们可以向其传递ID并检索用户元数据。在自定义身份验证流程中,Nakama服务器将接收ID,将其传递给第三方API,然后从响应中提取用户的ID和用户名,使用此信息创建和/或验证Nakama用户。

我们将通过定义beforeAuthenticateCustom钩子来实现这一功能。该函数将使用配置的运行时环境变量来检索第三方API的主机名,并将传入in.Account.Id的内容发布到API进行验证。完成后,将使用新的用户ID和用户名将Nakama用户与其第三方用户账户详情相关联。

以上代码(针对适当的第三方API运行)将根据用户的第三方ID创建/验证Nakama用户。将使用此ID从第三方服务检索用户ID和用户名,并保存到Nakama用户账户中。用户的第三方用户ID将被链接到Nakama自定义身份验证ID属性。

JWT身份验证 #

JSON Web令牌(JWT)是传输用户元数据和相关用户声明/权限的常用方式。知道签署JWT使用的密钥的任何接受者都可以验证这些JWT。这非常有用,因为这意味着任何服务都可以验证特定用户的身份和权限,前提是该用户信任创建JWT的第三方服务。

在本示例中,我们的beforeAuthenticateCustom函数将使用运行时环境变量中指定的密钥从客户端接收并验证JWT。之后,从JWT中提取声明并使用它来验证Nakama中的用户,如前所述,将Nakama用户与其第三方用户ID和用户名相关联。您可以使用自己喜欢的JWT库来验证JWT的签名以及从其主体中提取数据。例如,jwt-go库。

通过以上两个示例可以看出,将第三方身份验证服务与Nakama集成是一个简单而灵活的过程,无论用户的信息存储在何处,都可以在Nakama中对用户成功地进行身份验证。