IBM Connections 的 CORS 支持 API

CORS support for IBM Connections API

我们正在编写一个独立的 JavaScript 应用程序,它必须通过 Connections API 在 IBM Connections 社区中创建 Wiki 页面。但是,浏览器阻止了对连接 API 的请求,因为未在连接 API.

上配置跨源资源共享 (CORS)

是否可以配置连接 API 以允许来自我们所有内部应用程序的请求,例如 *.our-company.com?我们是 运行 Connections v5.0.

是的,这是可能的。您只需在 IHS 中进行配置即可!此配置片段可能对您有用:

RewriteCond %{HTTP:Origin} (.+\.<yourdomain>\.com) [NC]
RewriteRule .* - [E=acceptorigin:%1]
Header set Access-Control-Allow-Origin %{acceptorigin}e env=acceptorigin
Header set Access-Control-Allow-Credentials true env=acceptorigin
Header set Access-Control-Allow-Methods "POST, GET, HEAD" env=acceptorigin 
Header set Access-Control-Max-Age 3600 env=acceptorigin 
Header set Access-Control-Allow-Headers Content-Type env=acceptorigin

Daniel 的回答是一个很好的起点,适用于简单的 cross-origin 请求,但我发现 state-changing、pre-flighted 请求还有一些障碍需要克服。通过取消注释 IBM HTTP Server httpd.conf 文件中的相应行启用 Apache 重写模块后,我的解决方案是将以下内容添加到 VirtualHost 区域:

RewriteEngine on
RewriteCond %{HTTP:Origin} ^(http(s)?://mysubdomain.mydomain.com)$ [NC]
RewriteRule .* - [E=acceptorigin:%1]
Header always set Access-Control-Allow-Origin %{acceptorigin}e env=acceptorigin
Header always set Access-Control-Allow-Credentials true env=acceptorigin
Header always set Access-Control-Allow-Methods "POST, GET, HEAD, OPTIONS, DELETE, PUT" env=acceptorigin 
Header always set Access-Control-Max-Age 3600 env=acceptorigin 
Header always set Access-Control-Allow-Headers Content-Type env=acceptorigin

RewriteCond %{HTTP:Origin} ^(http(s)?://mysubdomain.mydomain.com)$ [NC]
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule .* - [R=200,L]

RequestHeader unset Origin env=acceptorigin

(当然,大牛对域使用了更通用的正则表达式:我只需要一个特定的来源,所以相应地配置。)

"always set" 对于 pre-flighted cross-domain 请求很重要,它会在发出真正的请求之前向服务器发送一个 OPTIONS 请求。这里,"always" 表示 "even put these headers on error responses"。 Connections 不知道如何处理 OPTIONS 请求和 returns 错误;我通过设置 headers 来处理这个问题,然后 re-writing 将状态代码设置为 200(浏览器仍然会收到警告错误的文本,但并不关心)。

您不需要最后的 "unset" 行来通过 Web 服务器,但至少连接 API 的某些部分将拒绝具有 Origin 的 POST 请求header 出现 403。为了解决这个问题,如果 header 与我允许的来源相匹配,我会在 IBM WebSphere Application Server 获取它之前从请求中删除来源 header .

IBM Connections 5.5 可以直接处理 CORS。您需要向 LotusConnections-config.xml:

添加两个自定义属性
<genericProperty name="CORS.Trusted.Websites">mydom1.com, mydom2.com</genericProperty>
<genericProperty name="CORS.Expose.Headers">Content-Encoding, Content-Length</genericProperty>

可在此处找到详细信息:

IBM Connections 5.5 API - CORS