ServerToken(ID登録タイプ)のToken発行時のエラーについて

開発ユーザ

2020.07.15既読 4691

SalesforceからLINE WORKSのAPIを呼び出すために、ID登録タイプの認証を用いてTokenの発行を行おうとしています。
LINE WORKS認証サーバーへのTokenリクエスト時に下記エラーが発生します。
{"message":"jwt invalid signature","code":"30","detail":"Unable to verify RSA signature using configured PublicKey. Signature length not correct: got 249 but was expecting 256"}
※「249」の部分は毎回変わります
Salesforce(java like)で下記のような処理を記載しているのですが、認証部分に疎いためどの辺りが原因なのか検討がつきません。
どなたかわかる方教えていただけないでしょうか。
------------------------------------------------------------------------------------------------
String header = EncodingUtil.base64Encode(Blob.valueOf('{"alg":"RS256","typ":"JWT"}'));
// datetime.now()がGMTでの取得のため、+9時間しています
// getTime()はDateTimeオブジェクトで表された1970年1月1日0時0分0秒 (GMT) を起点としたミリ秒数を返すため、/1000をしています
Long startDate = datetime.now().addHours(9).getTime() / 1000;
Long endDate = datetime.now().addHours(9).addMinutes(30).getTime() / 1000;
String jsonClaimSet = EncodingUtil.base64Encode(
    Blob.valueOf('{"iss":"【サーバー ID】","iat":' + String.valueOf(startDate) + ',"exp":' + String.valueOf(endDate) + '}'));

Blob input = Blob.valueOf(header + '.' + jsonClaimSet);
// 認証キーは-----BEGIN PRIVATE KEY-----と-----END PRIVATE KEY-----の間を改行削除した文字列を設定してます
Blob privateKey = EncodingUtil.base64Decode(【認証キー】);

String signature = EncodingUtil.base64Encode(Crypto.sign('RSA-SHA256', input, privateKey));

HttpRequest req = new HttpRequest();
req.setHeader('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');
req.setEndpoint('https://auth.worksmobile.com/b/API ID】/server/token');
req.setMethod('POST');
req.setBody('grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=' + header + '.' + jsonClaimSet + '.' + signature);

コメント1

  • 업데이트 된 답글입니다.

    開発ユーザ 投稿者

    自己解決しました。
    どうやらEncodingUtil.base64EncodeだけではURLセーフではないので、別途「+」→「-」変換、「/」→「_」変換、「=」除去を行わなければならなかったようです。
    修正したら無事Tokenを発行することができました。

    2020.07.18

    0
前の投稿サンプルBotのお問合せBotについて
次の投稿友達を登録時、友達情報(外部ユーザ)をSalesforceとの取引先責任者同期
リスト

まだ、解決できませんか?
今すぐ実際に使用しているLINE WORKSユーザーに質問してみましょう。