使用 erlang 计算 Google OAuth 服务帐户的 JWT 签名?
Computing the JWT signature for Google OAuth Service Account using erlang?
我已经创建了 google 服务帐户并且有 JSON 包含 private_key
、client_email
等的文件
JWT should be created to get access token.
我已按照以下步骤操作
Header计算:
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(也称为 RSASSA-PKCS1-V1_5-SIGN 和 SHA-256 哈希函数)对 Input
的 UTF-8 表示进行签名,并使用 private_key
来计算 JWT 签名?
已经建立了库来执行此操作。一个(我正在使用的)是 Erlang JOSE.
%% In OTP 17 or later
Signed = jose_jwt:sign(RSAPrivate, #{ <<"alg">> => <<"RS256">> }, Payload),
{_JWS, Token} = jose_jws:compact(Signed).
请看https://github.com/kivra/oauth2_client
从 1.4.0 版开始,它支持使用服务帐户凭据 JSON 文件进行授权,我使用示例 https://github.com/kivra/oauth2_client/pull/26.
创建了一个拉取请求
我已经创建了 google 服务帐户并且有 JSON 包含 private_key
、client_email
等的文件
JWT should be created to get access token.
我已按照以下步骤操作
Header计算:
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(也称为 RSASSA-PKCS1-V1_5-SIGN 和 SHA-256 哈希函数)对 Input
的 UTF-8 表示进行签名,并使用 private_key
来计算 JWT 签名?
已经建立了库来执行此操作。一个(我正在使用的)是 Erlang JOSE.
%% In OTP 17 or later
Signed = jose_jwt:sign(RSAPrivate, #{ <<"alg">> => <<"RS256">> }, Payload),
{_JWS, Token} = jose_jws:compact(Signed).
请看https://github.com/kivra/oauth2_client 从 1.4.0 版开始,它支持使用服务帐户凭据 JSON 文件进行授权,我使用示例 https://github.com/kivra/oauth2_client/pull/26.
创建了一个拉取请求