ServerToken(ID登録タイプ)のToken発行時のエラーについて
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
まだ、解決できませんか?
今すぐ実際に使用しているLINE WORKSユーザーに質問してみましょう。