我的 Salesforce Visualforce 页面不需要身份验证
My Salesforce Visualforce page doesn't require authentication
我有一个遗留系统需要一些微小的改进才能使系统 运行 不受干扰。我最近收到了来自 Salesforce 的安全通知,称 Winter '21 版本即将发布一些即将对我的系统产生影响的更改。安全来宾用户记录访问将开始成为强制性的。通过将此设置作为测试打开会阻止我的系统现在正常工作。该系统目前已设置为使用 Visualforce 页面访问 APEX 脚本,这些脚本将一些业务逻辑甚至 update/insert 一些数据发送给 Salesforce。该 Visualforce 页面是从 运行 完全独立的另一个系统调用的。尽管我一直在关注即将发布的 Salesforce 版本,但我无法以目前的方式 insert/update 数据。我意识到我需要通过某种身份验证来保护它,这样我就可以在勾选安全来宾用户记录访问选项时让我的系统正常工作。我想为我的 apex 脚本添加用户身份验证。我创建了一个新的连接应用程序并执行了以下操作:
- 启用 OAuth 设置
- 设置 OAuth 范围完全访问(完全)
- 设置 IP 放宽以放宽 IP 限制
- 公开 Apex 类 作为 REST Web 服务
我目前一直在使用 Salesforce Sandbox 作为测试。我创建了一个新的连接应用程序并首先进行了登录调用。一切正常,return 为我提供了访问令牌。当我通过定义了新 apex:page 的 Visualforce 页面调用 apex 脚本时,我确实确保没有打开任何会话。出于某种原因,我的 Visualforce 页面始终是 public,并且允许我访问所有内容而无需询问我任何令牌。
完成所有这些后,我仍然可以访问所有内容而无需进行任何用户身份验证。
谁能给我一些建议。
我在这里调用 Visualforce 页面,在 return 中调用 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
}
}
编辑:我添加了更多背景信息以更好地理解我的问题。我还添加了一些代码示例。 Tyi 我与 Salesforce 一起工作一周,试图解决问题的经验不多。
(评论太长)
你的问题很混乱,你想做什么?连接的应用程序用于 API 访问(REST、SOAP),但随后您编写了有关 Visualforce 页面的内容,这是用于正常 browser-based 访问。
作为内部用户,您将有权访问所有 VF 页面(当然,如果您是系统管理员或您的个人资料已分配这些页面)。无需连接的应用程序。如果您是外部用户(来宾),如果 VF 页面在站点上公开,您仍然可以访问它。无需登录 = 无需 OAuth2。
使用 API 访问权限,您需要先进行登录调用(很少有方法可以做到这一点,SOAP 或有 ~9 OAuth2 选项可供选择),然后您可以访问 apex REST 服务,例如(再次,如果您的个人资料允许的话)。
如果你想进行程序化屏幕抓取(拉取 html VF 页面而不是调用 APIs)这也是可行的,但你需要传递一个 session id 作为 cookie Authorization
header 个。不过,这不是官方支持的 API。
你想做什么?你能 post 任何代码吗?
我有一个遗留系统需要一些微小的改进才能使系统 运行 不受干扰。我最近收到了来自 Salesforce 的安全通知,称 Winter '21 版本即将发布一些即将对我的系统产生影响的更改。安全来宾用户记录访问将开始成为强制性的。通过将此设置作为测试打开会阻止我的系统现在正常工作。该系统目前已设置为使用 Visualforce 页面访问 APEX 脚本,这些脚本将一些业务逻辑甚至 update/insert 一些数据发送给 Salesforce。该 Visualforce 页面是从 运行 完全独立的另一个系统调用的。尽管我一直在关注即将发布的 Salesforce 版本,但我无法以目前的方式 insert/update 数据。我意识到我需要通过某种身份验证来保护它,这样我就可以在勾选安全来宾用户记录访问选项时让我的系统正常工作。我想为我的 apex 脚本添加用户身份验证。我创建了一个新的连接应用程序并执行了以下操作:
- 启用 OAuth 设置
- 设置 OAuth 范围完全访问(完全)
- 设置 IP 放宽以放宽 IP 限制
- 公开 Apex 类 作为 REST Web 服务
我目前一直在使用 Salesforce Sandbox 作为测试。我创建了一个新的连接应用程序并首先进行了登录调用。一切正常,return 为我提供了访问令牌。当我通过定义了新 apex:page 的 Visualforce 页面调用 apex 脚本时,我确实确保没有打开任何会话。出于某种原因,我的 Visualforce 页面始终是 public,并且允许我访问所有内容而无需询问我任何令牌。
完成所有这些后,我仍然可以访问所有内容而无需进行任何用户身份验证。
谁能给我一些建议。
我在这里调用 Visualforce 页面,在 return 中调用 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
}
}
编辑:我添加了更多背景信息以更好地理解我的问题。我还添加了一些代码示例。 Tyi 我与 Salesforce 一起工作一周,试图解决问题的经验不多。
(评论太长)
你的问题很混乱,你想做什么?连接的应用程序用于 API 访问(REST、SOAP),但随后您编写了有关 Visualforce 页面的内容,这是用于正常 browser-based 访问。
作为内部用户,您将有权访问所有 VF 页面(当然,如果您是系统管理员或您的个人资料已分配这些页面)。无需连接的应用程序。如果您是外部用户(来宾),如果 VF 页面在站点上公开,您仍然可以访问它。无需登录 = 无需 OAuth2。
使用 API 访问权限,您需要先进行登录调用(很少有方法可以做到这一点,SOAP 或有 ~9 OAuth2 选项可供选择),然后您可以访问 apex REST 服务,例如(再次,如果您的个人资料允许的话)。
如果你想进行程序化屏幕抓取(拉取 html VF 页面而不是调用 APIs)这也是可行的,但你需要传递一个 session id 作为 cookie Authorization
header 个。不过,这不是官方支持的 API。
你想做什么?你能 post 任何代码吗?