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

时间:2016-08-19 19:34:19

标签: erlang google-oauth jwt sha256 rsa-sha256

我创建了Google服务帐户并拥有包含private_keyclient_email等的JSON文件。

JWT should be createdget access token

我已按照以下步骤进行操作

标头计算:

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}

和, 我们如何使用SHA256withRSA(也称为带有SHA-256哈希函数的RSASSA-PKCS1-V1_5-SIGN)与Input签署private_key的UTF-8表示来计算JWT签名?< / p>

2 个答案:

答案 0 :(得分:0)

已经建立了可以执行此操作的库。一个(我正在使用)是Erlang JOSE

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

答案 1 :(得分:0)

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