Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应用程序间身份验证的建议(Salesforce->;Heroku)_Java_Rest_Heroku_Oauth_Salesforce - Fatal编程技术网

Java 应用程序间身份验证的建议(Salesforce->;Heroku)

Java 应用程序间身份验证的建议(Salesforce->;Heroku),java,rest,heroku,oauth,salesforce,Java,Rest,Heroku,Oauth,Salesforce,在过去的一周里,我一直在努力为我的实现获得理想的配置。基本上,我有一个Salesforce页面,该页面生成一个REST调用,其中包含一些要计算的数据,Heroku服务器然后计算这些数据,然后在响应中将计算出的数据发送回SF。这一切都发生在后台,因此不存在Heroku前端 我想用oAuth2保护此调用,但我不确定最好的方法: 数据本身并不重要,重要的是访问heroku应用程序 如果我使用salesforce进行身份验证,这意味着callout结构不起作用(我必须为Heroku实现一个系统,以便在返

在过去的一周里,我一直在努力为我的实现获得理想的配置。基本上,我有一个Salesforce页面,该页面生成一个REST调用,其中包含一些要计算的数据,Heroku服务器然后计算这些数据,然后在响应中将计算出的数据发送回SF。这一切都发生在后台,因此不存在Heroku前端

我想用oAuth2保护此调用,但我不确定最好的方法:

数据本身并不重要,重要的是访问heroku应用程序

如果我使用salesforce进行身份验证,这意味着callout结构不起作用(我必须为Heroku实现一个系统,以便在返回SF之前从SF中获取数据),这并不理想,我也看不到使用Heroku身份验证的方法,因为它允许访问api,但不允许在单个结构中访问应用程序脚本。我想我必须在Heroku中创建自己的身份验证服务器,但我不确定这是否是正确的方法。 任何提示都将不胜感激

这是我的SF编号:

Http http = new Http();
HttpRequest request = new HttpRequest();
//Sets the url to heroku
request.setEndpoint('My App URL');
request.setMethod('POST');
request.setHeader('Content-Type', 'application/json');
//places the content into the body
request.setBody(content);
//Extends the read timeout
request.setTimeout('120000');
//Sends the request and waits for a response
HttpResponse response;
response = http.send(request);
希罗库方面:

    post("/", (req, res) -> {
        //creates a local var for the JSON string
        String data = req.body();
        //--** The server then computes this data and calculates output
        String computedData = compute(data);
        return computedData;
    });
我需要一种验证这种连接类型的方法,谢谢

你读了给OAuth的信了吗?这很有帮助。流程将是:-

  • Salesforce应用程序向您的Heroku发出重定向-
    GEThttps://id.heroku.com/oauth/authorize?client_id={client id}&response_type=code&scope={scopes}&state={anti-forgery-token}
  • 用户获得授权访问后,将使用exchange令牌回调您的Salesforce应用程序
  • 然后,Salesforce应用程序需要将令牌与Heroku应用程序交换为具有相关作用域的访问令牌,以访问Salesforce的数据
  • 我不确定这是否是您想要的,因为OAuth的整个要点不是身份验证,而是授权,即,OAuth流的设计目的不是识别用户,而是让您的客户端(本例中为Salesforce)能够访问提供商(本例中为您的Heroku应用程序)持有的用户资源


    由于您需要的是身份验证,而不是授权,因此您可以采取几种方法,具体取决于您需要投入的工作量和安全性(您必须对此进行调用)

  • 又快又脏,但不太安全

    你只需检查Heroku上的推荐人标题,如果客户不是你的Salesforce应用程序,则返回403禁止或401未授权。它不是很可靠,因为referer不太可靠,但是如果您对身份验证没有很好的理解,并且只想要一些快速和基本的东西,那么它是快速和直接的

  • 在每个请求中发送客户端ID

    这可能是一个标题,也可能在请求的主体中。为了确保安全,您需要对其进行加密,因为您说不想使用SSL/TLS。因此,您需要在每一端加密/解密客户端ID

    一种基本的方法是只使用一些在客户端(Salesforce)和提供商(Heroku)之间共享的对称密钥,这些密钥安全地存储在每个应用程序中的某个位置,以便黑客无法读取。您还可以共享(并安全地存储)一些ID字符串(理想情况下是一些长随机散列)

    流程如下所示:-

  • Salesforce应用程序获取随机ID字符串并使用对称密钥对其进行加密。这是您在请求中发送到Heroku应用程序的内容

  • Heroku应用程序-在收到传入请求时-读取加密值。然后使用对称密钥对其进行解密。然后,您的Heroku应用程序会比较请求中传递的解密值和随机ID字符串(它也存储在本地),如果它们相同,您一定程度上相信请求的来源是您的Salesforce应用程序。如果不是,你就拒绝这个请求

  • 身份验证和加密一样是一个大课题。如果你真的需要保护数据,如果你不这样做,就有被起诉的风险,那么你需要做更多的研究。如果数据不敏感(或者对其他人来说特别有价值),而你只是试图拥有一些基本的前门,从而减少其他应用程序在应用程序上施加的负载,那么你可以考虑只检查引用者作为第一次尝试。

    你读到OAuthe了吗?这很有帮助。流程将是:-

  • Salesforce应用程序向您的Heroku发出重定向-
    GEThttps://id.heroku.com/oauth/authorize?client_id={client id}&response_type=code&scope={scopes}&state={anti-forgery-token}
  • 用户获得授权访问后,将使用exchange令牌回调您的Salesforce应用程序
  • 然后,Salesforce应用程序需要将令牌与Heroku应用程序交换为具有相关作用域的访问令牌,以访问Salesforce的数据
  • 我不确定这是否是您想要的,因为OAuth的整个要点不是身份验证,而是授权,即,OAuth流的设计目的不是识别用户,而是让您的客户端(本例中为Salesforce)能够访问提供商(本例中为您的Heroku应用程序)持有的用户资源


    由于您需要的是身份验证,而不是授权,因此您可以采取几种方法,具体取决于您需要投入的工作量和安全性(您必须对此进行调用)

  • 又快又脏,但不太安全

    你只需检查Heroku上的推荐人标题,如果客户不是你的Salesforce应用程序,则返回403禁止或401未授权。它不是很可靠,因为referer不太可靠,但是如果您对身份验证没有很好的理解,并且只想要一些快速和基本的东西,那么它是快速和直接的

  • 在每个请求中发送客户端ID

    这可能是一个标题,也可能在需求的主体中