gpt4 book ai didi

algorithm - 使用 Laravel 凭据在 Firebase 中进行身份验证

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:43 25 4
gpt4 key购买 nike

根据本教程:https://firebase.google.com/docs/auth/server?hl=es#crear_un_token_personalizado

我可以使用在服务器中生成的 JWT 在 Firebase 应用程序(客户端)中对用户进行身份验证。

为了实现这一点,我在我的 Laravel 项目中添加了一个新的依赖项:jwt-auth

我已经使用常规 JWT 正确设置了身份验证。但是,为了在 Firebase 中进行身份验证,我需要使用教程中描述的自定义参数生成一个特定的 JWT。

我已经更改了参数。但它也需要使用RS256算法。更改算法时出现错误。

错误提示 Could not create token: openssl_pkey_get_details() expects parameter 1 to be resource, boolean given

软件包的 Github 中报告了一个问题,它告诉我需要两个密码(私钥和公钥)。但我只有 1 个 key ,取自 Firebase 控制台。

有人使用现有数据库中的凭据实现了 Firebase 身份验证?

我真的需要两个密码才能使用上述算法吗?

请给我一些想法。提前谢谢你。

最佳答案

因此,我们已经在后端使用 tymondesigns/jwt-auth 获得 token 授权,现在我们想利用我们的 token 登录 firebase。

<强>1。改变算法

默认情况下,该包使用对称算法 HS256,该算法使用环境中的 JWT_SECRET 进行编码/解码。 Firebase 需要 RS256,因此为了继续,我们显然要将算法更改为 RS256。

转到 .env 文件并添加下一个变量:

JWT_ALGO=RS256
JWT_PUBLIC_KEY=credentials/public.key
JWT_PRIVATE_KEY=credentials/private.key
JWT_PASSPHRASE=super_secret

同时修改配置文件config/jwt.php:

'keys' => [

'public' => 'file://' . base_path( env('JWT_PUBLIC_KEY') ),

'private' => 'file://' . base_path( env('JWT_PRIVATE_KEY') ),

'passphrase' => env('JWT_PASSPHRASE'),
],

<强>2。获取服务帐户 RSA private 并创建 public

如您所见,我们将应用配置为在 your_project/credentials 文件夹中查找 key ,文件名为 public.key 和 private.key。所以我们需要创建一个 key 对。

// Create new dummy private key inside your_project/credentials project
openssl genrsa -out private.key 1024

接下来打开你的google service account .json文件,复制private_key字符串到private.key文件(实际上是替换一个key),同时把'\n'符号换成新行。

现在根据 google private 生成公钥:

openssl rsa -in private.key -pubout -out public.key

创建 key 后测试您的项目身份验证,它必须与新的 RS256 alg 一起正常工作。

<强>3。为 firebase 创建不同的(第二个) token

此外,我发现无法使用单一 token 对项目和 firebase 中的用户进行身份验证,因为 firebase 的必需声明和默认的 jwt-auth 冲突。 jwt-auth 使用 'sub' 来存储用户的 id,firebase 用于 service_account_email。并且可能还有其他问题,所以我为 firebase 创建了一个特殊的(第二个) token 。向用户模型添加方法:

/**
* Creates addiotional jwt token for the firebase
*
* @return string
*/
public function firebaseToken()
{
$googleServiceAccountEmail = env('GOOGLE_SERVICE_ACCOUNT_EMAIL');
$time = time();
$expires = $time + (60 * 60);

$customClaims = [
'iss' => $googleServiceAccountEmail,
'sub' => $googleServiceAccountEmail,
'aud' => env('GOOGLE_AUD'),
'iat' => $time,
'exp' => $expires,
'uid' => $this->id
];

$payload = JWTFactory::customClaims($customClaims)->make();
$token = \JWTAuth::encode($payload)->get();

return $token;
}

在登录、邀请、注册等之后返回此附加 token ...并使用它在客户端登录 firebase。

呵呵,我希望我的经验和这个小“指南”对你们有所帮助。

关于algorithm - 使用 Laravel 凭据在 Firebase 中进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40620941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com