首页 > 解决方案 > 如何使用 Ruby 获得 JWT?

问题描述

我目前正在做一个项目,我将整合我的公司和销售人员的应用程序。

就我而言,似乎使用 JWT 进行身份验证更好。所以,我想尝试一下。

但是我不知道如何在 Ruby 上生成 JWT,尽管我研究了很多。因此,如果有人知道如何制作 jwt,我希望您能告诉我如何制作。

我想做的是1,在salesforce上创建应用程序(完成)2,创建X509认证并将其设置在salesforce上的应用程序上。(done) 3、使用X509认证的秘钥创建JWT。(不知道如何)

我一直在寻找解决这个问题的方法,但我做不到。我想我应该做这样的事情。

require 'jwt'

payload = { data: 'test' }

# The secret must be a string. A JWT::DecodeError will be raised if it isn't provided.
hmac_secret = 'my$ecretK3y'

token = JWT.encode payload, hmac_secret, 'HS256'

# eyJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoidGVzdCJ9.pNIWIL34Jo13LViZAJACzK6Yf0qnvT_BuwOxiMCPE-Y
puts token

decoded_token = JWT.decode token, hmac_secret, true, { algorithm: 'HS256' }

# Array
# [
#   {"data"=>"test"}, # payload
#   {"alg"=>"HS256"} # header
# ]
puts decoded_token

但这不适用于我的本地。当我运行这个文件时,它说

`require': cannot load such file -- jwt

我想我想做的PHP版本就是这个。

    <?php

require_once './vendor/autoload.php';

use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Signer\Key;
use Lcobucci\JWT\Signer\Rsa\Sha256;

// ログインURL
// 本番: https://login.salesforce.com
// Sandbox: https://test.login.salesforce.com
// スクラッチ組織: https://test.saleforce.com
define('LOGIN_URL', 'https://test.salesforce.com');
// コンシューマ鍵
define('CLIENT_ID', <<接続アプリケーションのコンシューマ鍵>>);
// ユーザID
define('USER_ID', 'xxxxx@example.com');

function createjwt() {

   $signer = new Sha256();
   $privateKey = new Key('file://cert/server.key');
   $time = time();
   
   $token = (new Builder())->issuedBy(CLIENT_ID) // iss: コンシューマ鍵
                           ->permittedFor(LOGIN_URL) // aud: SalesforceログインURL
                           ->relatedTo(USER_ID) // sub: SalesforceユーザID
                           ->expiresAt($time + 3 * 60) // exp: 3分以内
                           ->getToken($signer,  $privateKey);

   return $token;
}

$jwt = createjwt();

echo $jwt;

如果您有任何线索,请帮助我。

参考资料在这里: https ://help.salesforce.com/articleView?id=sf.remoteaccess_oauth_jwt_flow.htm&type=5 https://github.com/jwt/ruby-jwt

标签: ruby-on-railsrubyjwtsalesforce

解决方案


这不是 JWT 的错误,而是我无法正确安装 get。由于内存不足,我尝试过一次。这解决了这个问题。宝石安装 jwt

谢谢你。


推荐阅读