質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Salesforce

Salesforceは、クラウド型の顧客関係管理(CRM)、営業支援(SFA)などのサービスを提供している企業。米カリフォルニア州に本社があり、日本法人は株式会社セールスフォース・ドットコムです。

JWT(JSON Web Token)

JWT(JSON Web Token)とは、JSONをベースとしたアクセストークンの仕様。電子署名付きのURL safeなJSONのことを指します。電子署名が付いているため、改ざんをチェックできる点がメリットです。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Q&A

0回答

624閲覧

SalesforceにpostリクエストでJWTを送りたいです。

tako7

総合スコア7

Salesforce

Salesforceは、クラウド型の顧客関係管理(CRM)、営業支援(SFA)などのサービスを提供している企業。米カリフォルニア州に本社があり、日本法人は株式会社セールスフォース・ドットコムです。

JWT(JSON Web Token)

JWT(JSON Web Token)とは、JSONをベースとしたアクセストークンの仕様。電子署名付きのURL safeなJSONのことを指します。電子署名が付いているため、改ざんをチェックできる点がメリットです。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

0グッド

0クリップ

投稿2021/06/25 04:02

やりたいこと

こちらの公式ドキュメントにある通り、JWTをsalesforceへ送り、アクセストークンを取得したいです。

やったこと

やったことは、
①RSAのprivate-key を発行し、証明書を作成。
②証明書をsalesforceのアプリケーションに保存。
③手元のコードでJWTを作成し、salesforceへ送信する(レスポンスがエラーを返すので、正しく渡せていません。)

試したコードはこちらです。

ruby

1require 'jwt' 2require 'json' 3require 'net/http' 4require 'uri' 5require 'active_support/all' 6require "base64" 7 8class Salesforce 9 def initialize 10 @cert_file = File.join(File.dirname(__FILE__), *%w[private-key.pem]) 11 @base_url = "https://login.salesforce.com" 12 @auth_endpoint = "/services/oauth2/authorize" 13 @token_request_endpoint = "/services/oauth2/token" 14 @token_revoke_endpoint = "/services/oauth2/revoke" 15 @username = "私のアカウント" 16 @client_id = "私のコンシューマID" 17 @private_key = OpenSSL::PKey::RSA.new(File.read(@cert_file)) 18 end 19 20 21 def claim_set 22 { 23 iss: @client_id, 24 sub: @username, 25 aud: @base_url, 26 exp: (Time.now + 3.minutes).to_i.to_s 27 } 28 end 29 30 def jwt_bearer_token 31 token = JWT.encode(claim_set.to_s.gsub(/\/) { '' }, @private_key, 'RS256') 32 # token.encode(Encoding::UTF_8) 33 end 34 35 def request_auth 36 post = {grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer", assertion: jwt_bearer_token} 37 uri = URI.parse("#{@base_url}#{@token_request_endpoint}") 38 https = Net::HTTP.new(uri.host, 443) 39 https.use_ssl = true 40 response = https.post(uri.path, post.to_query) 41 print response.body 42 end 43 44 print Salesforce.new.request_auth 45 print Salesforce.new.jwt_bearer_token 46 47end

わかっていること

jwt.ioのdebuggerでjwt_bearer_tokenを確認すると、
header には

{ "alg": "RS256" }

payload には

"{:iss=>\"私のコンシューマID\", :sub=>\"私のアカウント\", :aud=>\"https://login.salesforce.com\", :exp=>\"1624593277\"}"

と表示されており、内容に問題はなさそうです。(若干気になるのは、""このバックスラッシュが入っている点です。

salesforceに詳しい方がいらっしゃればお答えいただけるととてもありがたいです。
試せるものは試したいと思っています。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問