我的Salesforce Visualforce页面不需要身份验证

时间:2020-09-09 16:43:37

标签: authentication salesforce apex apex-code

我有一个旧系统,需要进行一些细微的改进,以使系统能够不间断地运行。我最近从Salesforce收到一条安全通知,称Winter ’21发行版中即将进行一些更改,这些更改将对我的系统产生影响。安全访客用户记录访问将开始是强制性的。通过测试将此设置打开会阻止我的系统立即正常运行。当前已将系统设置为使用Visualforce页面访问APEX脚本,这些脚本制定了一些业务逻辑,甚至将一些数据更新/插入了Salesforce。该Visualforce页面已从另一个完全独立运行的系统调用。由于我遵循即将发布的Salesforce版本,因此无法按照我目前的方式插入/更新数据。我意识到我需要用某种认证的安全这个,所以我可以保持我的系统工作时的安全来宾用户记录访问选项已被选中。我想为我的apex脚本添加用户身份验证。我创建了一个新的Connected App,并执行以下操作:

  1. 启用了OAuth设置
  2. 设置OAuth范围完全访问权限(完全)
  3. 设置IP放宽以放宽IP限制
  4. 将Apex类公开为REST Web服务

我目前一直在使用Salesforce沙箱作为测试。我创建了一个新的已连接应用程序,并首先拨打了登录电话。一切正常,并向我返回了访问令牌。我确实确定当我通过Visualforce页面调用apex脚本时没有打开任何会话,其中我已定义了一个新的apex:page。出于某种原因,我的Visualforce页面始终是公开的,并允许我访问所有内容而无需询问任何令牌。

完成所有这些操作后,我仍然可以访问所有内容,而无需执行任何用户身份验证。

有人可以建议我吗?

这里我正在调用Visualforce页面,该页面反过来会调用APEX脚本:

HttpRequestMessage apiRequest = new HttpRequestMessage(HttpMethod.Post, restCallURL);
        apiRequest.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
        apiRequest.Headers.Add("Authorization", $"Bearer {authToken}"); //check Bearer

即使没有设置令牌,它也可以正常工作。

这是我的Visualforce页面的外观:

<apex:page controller="TestGatewayResource" sidebar="false" showheader="false" contenttype="text/plain" action="{!action1}">{!StringCodeReturned}</apex:page>

这是我测试的Apex脚本:

@RestResource(urlMapping='/test_defined_type/*')
global class TestGatewayResource
{
String StringCodeReturned = ""; // very simplified to give an idea what I am doing.
@HttpPost  
global static String activate()
{
    // makes some work by calling other classes and inserting/updating data to Salesforce
}

}

编辑:我添加了更多背景信息以更好地理解我的问题。我还添加了一些代码示例。我没有比与Salesforce一起解决问题一周有更多经验。

1 个答案:

答案 0 :(得分:-1)

(评论太久了)

您的问题令人困惑,您要做什么?已连接的应用程序用于API访问(REST,SOAP),但随后您将撰写有关Visualforce页面的内容,该页面用于基于浏览器的常规访问。

作为内部用户,您可以访问所有VF页面(好吧,如果您是sysadmin或您的个人资料已分配它们)。无需连接的应用程序。如果您是外部用户(访客),则您仍可以访问VF页面(如果该页面在站点上公开)。无需登录=无需OAuth2。

使用API​​访问权限,您需要先进行登录调用(很少的方式,可以使用SOAP或从〜9 OAuth2选项中进行选择),然后再访问apex REST服务(例如,再次,如果配置文件允许) )。

如果您想进行程序化屏幕抓图(拉动VF页面的html而不是调用API)也是可行的,但是您需要将会话ID作为cookie而不是Authorization头传递。不过,这不是官方支持的API。

您想做什么?您可以张贴任何代码吗?