使用erlang计算Google OAuth服务帐户的JWT签名?

ih99xse1  于 2022-12-16  发布在  Erlang
关注(0)|答案(2)|浏览(194)

我已经创建了谷歌服务帐户,并有包含private_keyclient_email等JSON文件。
应创建JWT以获取访问令牌。
我已遵循以下步骤
表头计算:

Header = jsx:encode(#{<<"alg">> => <<"RS256">>,<<"typ">> => <<"JWT">>}).
Base64Header = base64:encode(Header).

索赔计算:

Claims = jsx:encode(#{
  <<"iss">> => <<"google-123@some-test.iam.gserviceaccount.com">>,
  <<"scope">> => <<"https://www.googleapis.com/auth/cloud-platform">>,
  <<"aud">> => <<"https://www.googleapis.com/oauth2/v4/token">>,
  <<"exp">> => 1471629262,
  <<"iat">> => 1471627282
}).
Base64Claims = base64:encode(Claims).

Input = {Base64Header}.{Base64Claim}

我们如何使用SHA 256 withRSA(也称为RSASSA-PKCS 1-V1_5-SIGN,使用SHA-256散列函数)对Input的UTF-8表示进行签名,并使用private_key计算JWT签名?

g6baxovj

g6baxovj1#

已经有一些库可以完成这个任务,其中一个(我正在使用)是Erlang JOSE

%% In OTP 17 or later
Signed = jose_jwt:sign(RSAPrivate, #{ <<"alg">> => <<"RS256">> }, Payload),
{_JWS, Token} = jose_jws:compact(Signed).
pes8fvy9

pes8fvy92#

请看一下https://github.com/kivra/oauth2_client从版本1.4.0开始,它支持使用服务帐户凭据JSON文件进行授权,我使用https://github.com/kivra/oauth2_client/pull/26示例创建了一个拉取请求。

相关问题