Google OAuthを使用してノードエクスプレスアプリのユーザーを認証しようとしています。ノードアプリケーションでGoogle OAuth 2.0 JWT(OpenID Connect)をデコードするにはどうすればよいですか?
{
access_token: 'token string',
id_token: 'id.string',
expires_in: 3599,
token_type: "Bearer"
}
このすべてが理にかなって、私は私の人生のためにJWTをデコードする方法を見つけ出すことはできません:私は成功しそうのような応答を返すのOAuthを行うことができます。私はこれすべてのことで未経験なので、これは私にとっては少し外国語です。
ここに記載されている手順に従います。https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtokenノードアプリケーションでJWTをローカルにデコードしようとしています。
私のノード環境にhttps://github.com/hokaccha/node-jwt-simpleをインストールしました。
そして私はこの証明書(https://www.googleapis.com/oauth2/v1/certs)を何とか解読する必要があると確信していますが、ここでは少し紛失しています。私は自分のノードアプリケーションに証明書をどのように取得するのか、それ以降はnode-jwt-simpleで証明書を使用する方法を理解していません。また、キャッシュされた証明書を使用する場合と、新しい証明書を取得する必要があるときをどう知っているかもわかりません。
誰かがこれで私を助けることができるいくつかの経験がありますか?
ありがとうございました。私はこの時点で完全に迷っています。
**更新**
は、だから私は種類の...いくつかの進歩を遂げています。 jwt.decode(id_token、certificate、true)を呼び出します。トークンを正常に解読できました。証明書varが空のオブジェクトであっても{}。これはまだ3つの質問で私を残します。 1:GoogleからのURLを使用して私のエクスプレスアプリに証明書を取得する最善の方法は何ですか? 2:新しいバージョンを取り込む必要があるときは、どうすればわかりますか? 3:noVerify(jwt.decodeの3番目の引数)にtrueを渡すような感じがします。それを通過させることなく、それをどうやって稼働させることができますか? おそらくjwt-simpleはhs256を期待しており、トークンはrs256を使用しているようです。
また、私はこれで経験の浅すぎるので、私はここから離れているかもしれません。
* UPDATE * Natの助けを借りて、私はこの作業を行うことができました! 私はJWTとJWSノードモジュールを1つずつ試してみたと思います。私が最終的に着陸したのは以下の通りです: 私が見たモジュールのどれも、私が箱から欲しかったものはまったくありませんでした。私はid_tokenをデコードするために使用している以下のjwtデコードヘルパーメソッドを作成しました。ヘッダーから子を取得できます。
module.exports = {
decodeJwt: function (token) {
var segments = token.split('.');
if (segments.length !== 3) {
throw new Error('Not enough or too many segments');
}
// All segment should be base64
var headerSeg = segments[0];
var payloadSeg = segments[1];
var signatureSeg = segments[2];
// base64 decode and parse JSON
var header = JSON.parse(base64urlDecode(headerSeg));
var payload = JSON.parse(base64urlDecode(payloadSeg));
return {
header: header,
payload: payload,
signature: signatureSeg
}
}
}
function base64urlDecode(str) {
return new Buffer(base64urlUnescape(str), 'base64').toString();
};
function base64urlUnescape(str) {
str += Array(5 - str.length % 4).join('=');
return str.replace(/\-/g, '+').replace(/_/g, '/');
}
私はから新しいパブリック証明書にプルする必要があるかどうかを判断するために、このデコーディングを使用しています:私は使用しています次にhttps://www.googleapis.com/oauth2/v1/certs
そのパブリック証明書とノード-JWS(https://github.com/brianloveswords/node-jws)jws.verify(id_token 、証明書)署名を検証する!
Hooray! ご返信いただいた追加の説明については、もう一度おねがいします。それは私が何をしようとしているのかを理解するのを助けてくれた長い道のりでした。これが他の人々にも役立つことを願っています。
すごい!徹底した詳細な説明に感謝します。これは、私が何をしようとしているのか、私の理解に大いに役立っています。そして、私はもう何か質問があれば、私が何を探しているべきかを知っています。ほんとうにありがとう。 – ThePuzzleMaster