Salesforce.comからGoogleのDFPへのサービスアカウントを使用して認証しようとしています。以前のユーザーと資格情報のペアで統合を行っていましたが、新しいユーザーに更新する必要があります。Google JWT Salesforceの署名が無効
Googleデベロッパーコンソールでプロジェクト/ユーザー/キーのペアを作成し、その新しいサービスアカウントをDFPのネットワークに追加しました。私はその後、 "iss"の値を新しいユーザーの電子メールに変更し、秘密鍵を鍵ペアから新しい秘密鍵に変更しました。
「署名が無効です」というエラーが表示されます。
SFDCでは、私はRSA-SHA256でCrypto.signメソッドを使用しています。
Iは、(私はこれまでASN.1フォーマットをデコードし、適合のためにノードを検査するように行った)ドキュメントごと除去ヘッダと改行文字でPKCS#8であることキーフォーマットを検証しました。
ユーザーと正しい資格情報の間の接続にステップがありませんでしたか?私が間違っている場所を見るために私が現地で生産している署名を検証する方法はありますか?私が見た唯一の違いは、古い秘密鍵が現在の秘密鍵よりも短いことです。
以下はJWTを生成するために使用しているコードです(ここでも、このコードは別のユーザー名と資格情報キーで正しく機能しています)。
JWTHeader head = new JWTHeader();
head.alg = 'RS256';
head.typ = 'JWT';
JWTClaimSet claim = new JWTClaimSet();
claim.iss = '<username>@*.iam.gserviceaccount.com';
claim.scope = 'https://www.googleapis.com/auth/dfp';
claim.aud = 'https://accounts.google.com/o/oauth2/token';
claim.iat = DateTime.now().getTime()/1000;
claim.exp = claim.iat + 3600;
System.debug(JSON.serialize(head));
System.debug(JSON.serialize(claim));
String key = '<privatekey>’;
String base = EncodingUtil.urlEncode(EncodingUtil.base64Encode(Blob.valueOf(JSON.serialize(head))), 'UTF-8') + '.' + EncodingUtil.urlEncode(EncodingUtil.base64Encode(Blob.valueOf(JSON.serialize(claim))), 'UTF-8');
String sig = EncodingUtil.urlEncode(EncodingUtil.base64Encode(Crypto.sign('RSA-SHA256', Blob.valueOf(base), EncodingUtil.base64Decode(key))), 'UTF-8');
String body = base + '.' + sig;
System.debug(body);
Http http = new Http();
HttpRequest req = new HttpRequest();
req.setEndpoint('https://accounts.google.com/o/oauth2/token');
req.setBody('grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=' + body);
req.setHeader('Content-Type', 'application/x-www-form-urlencoded');
req.setMethod('POST');
HttpResponse resp = http.send(req);