1

突然、Flex アプリが API 経由で salesforce.com に接続できなくなり、セキュリティ サンドボックス違反が発生しています。ログイン資格情報は正しいです。別の方法で試してみましたが、以下で難読化しました。

これは今日の初めにうまく機能していましたが、それ以来コーディングしていません。

他の誰かがこれに出くわしたり、何が起こっているのか知っていますか?

これが私のアプリに返された例外です

Method name is: login
'A997F86A-36E9-DDDC-EC6B-BBEE23101466' producer connected.
'A997F86A-36E9-DDDC-EC6B-BBEE23101466' producer sending message 'B89E5879-D7F7-E91E-2082-BBEE231054DD'
'direct_http_channel' channel sending message:
(mx.messaging.messages::HTTPRequestMessage)#0
  body = "<se:Envelope xmlns:se="http://schemas.xmlsoap.org/soap/envelope/"><se:Header xmlns:sfns="urn:partner.soap.sforce.com"/><se:Body><login xmlns="urn:partner.soap.sforce.com" xmlns:ns1="sobject.partner.soap.sforce.com"><username>simon.palmer@***.com</username><password>***</password></login></se:Body></se:Envelope>"
  clientId = (null)
  contentType = "text/xml; charset=UTF-8"
  destination = "DefaultHTTPS"
  headers = (Object)#1
  httpHeaders = (Object)#2
    Accept = "text/xml"
    SOAPAction = """"
    X-Salesforce-No-500-SC = "true"
  messageId = "B89E5879-D7F7-E91E-2082-BBEE231054DD"
  method = "POST"
  recordHeaders = false
  timestamp = 0
  timeToLive = 0
  url = "https://www.salesforce.com/services/Soap/u/11.0"
Method name is: login
*** Security Sandbox Violation ***
Connection to https://www.salesforce.com/services/Soap/u/11.0 halted - not permitted from https://localhost/pm_server/pm/pm-debug.swf
'A997F86A-36E9-DDDC-EC6B-BBEE23101466' producer acknowledge of 'B89E5879-D7F7-E91E-2082-BBEE231054DD'.
'A997F86A-36E9-DDDC-EC6B-BBEE23101466' producer fault for 'B89E5879-D7F7-E91E-2082-BBEE231054DD'.
Comunication Error : Channel.Security.Error : Security error accessing url : Destination: DefaultHTTPS
Error: Request for resource at https://www.salesforce.com/services/Soap/u/11.0 by requestor from https://localhost/pm_server/pm/pm-debug.swf is denied due to lack of policy file permissions.
4

5 に答える 5

1

この問題の解決策は、サーバーのプロトコルとURLを次のように設定することでした。

apex = new Connection();    
apex.serverUrl = "https://na3.salesforce.com/services/Soap/u/14.0";
apex.protocol = "https";

ただし、これにより、ユーザーがロックアウトされるという二次的な問題が発生するようであるため、接続性の欠如の問題が残ります。

更新: salesforce.comはバグを確認しました。私の他の関連する投稿を参照してください。

于 2008-12-04T02:48:24.377 に答える
1

/services ツリーからポリシーをロードする必要があります。ルートのデフォルト ポリシーは役に立ちません。このポリシーをロードする必要があります https://www.salesforce.com/services/crossdomain.xml

于 2008-11-27T18:38:18.080 に答える
0

flex から Google ドキュメントにファイルをアップロードしています。すべてがローカル ファイルで機能していますが、SWF ファイルを S コントロールとして Salesforce (サンドボックス) にアップロードすると、Google への接続時にエラーが表示されます。以下のエラーを参照してください。

Error:[FaultEvent fault=[RPC Fault faultString="Security error accessing url"
faultCode="Channel.Security.Error" faultDetail="Destination: DefaultHTTPS"] 
messageId="1F812836-1318-B845-AC01-F51AB1D11518" type="fault" bubbles=false 
cancelable=true eventPhase=2]

以下の解決策を試しましたが、何もうまくいかないようです: FLEX: - crossdomain.xml を bin-debug フォルダーに追加します。以下は、クロス ドメイン ポリシーの内容です。

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
     <allow-access-from domain="*" secure="false" />
<allow-http-request-headers-from domain="*" headers="*" secure="false" />
</cross-domain-policy>
  • 初期化で flash.system.security.allowinsecuredomain/allowdomain(“*”) を使用しました。
  • また、http Salesforce に設定された connection.protocol で試してみました。
  • リモート サイト設定でプロトコル セキュリティを無効にしました o セットアップ -> 管理セットアップ -> セキュリティ コントロール -> リモート サイト設定  URL: http://www.google.com.ph

Salesforce との接続には問題ありませんが、アップロード ページの初期化時に onErrorFault 関数にセキュリティ エラーが具体的に表示されます。以下にコード スニペットを示します。

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" width="534" height="462" verticalScrollPolicy="off" horizontalScrollPolicy="off"
creationComplete="init()" showCloseButton="true" close="{this.closeWindow(event)}" roundedBottomCorners="true">
<mx:Script>
<![CDATA[

private function init():void{
        Security.allowInsecureDomain("*");
        //<salesforce:Connection id="apex" sendRequest="sendRequestListener(event)" serverUrl="http://www.salesforce.com/services/Soap/u/10.0" protocol="http"/>   
        RESTProxyTest();
        send_data();
        arrAddedFiles = new Array();
        this.uploadGrid.dataProvider= this.acFiles; 
        this.title = "Attachment: "+this.selectedTimeSheetDetail.Project.label;
}

public function RESTProxyTest():void
    {
        _conn = new NetConnection();
        _conn.addEventListener(AsyncErrorEvent.ASYNC_ERROR, doAsyncError);
        _conn.addEventListener(IOErrorEvent.IO_ERROR, doIOError);
        _conn.addEventListener(SecurityErrorEvent.SECURITY_ERROR, doSecurityError);
        _conn.addEventListener(NetStatusEvent.NET_STATUS, doNetStatus);
        _conn.objectEncoding = ObjectEncoding.AMF3;

        _conn.connect(_url);
        _responder = new Responder(onResult, onFault);  

    }

private function send_data():void {
        userRequest.url = getLoginURL();
        userRequest.addEventListener(ResultEvent.RESULT, httpResult);
        userRequest.addEventListener(FaultEvent.FAULT, onErrorFault); 
        userRequest.send();
    } 

private function onErrorFault(obj:FaultEvent):void
    {
        Alert.show("Error:"+obj.toString());
    }

private function httpResult(obj:ResultEvent):void
    {
        trace(obj.toString());

        var result:String = obj.result as String;       
        var pos:int = result.lastIndexOf("Auth=");
        var auth:String = result.substr(pos + 5);
        txtAuth.text = StringUtil.trim(auth);
        placeCall();
    }

protected function placeCall():void
    {
        trace("placeCall");
        var headers:Array = ["Authorization: " + "GoogleLogin auth=" + StringUtil.trim(txtAuth.text)];
        var postVars:Array = [];         
        var uri:String = "http://docs.google.com/feeds/documents/private/full?showfolders=true"; 
        _conn.call("RESTProxy.request", _responder, uri, "get", new Array(), postVars, headers);
    }

private function getLoginURL():String
    {
        var url:String = 'https://www.google.com/accounts/ClientLogin?accountType=HOSTED_OR_GOOGLE&' +
        'Email=' + this.session.config.gmail + '&' +
        'Passwd=' + this.session.config.password + '&service=writely'; 

        return url;
    }   
]]>
</mx:Script>

<mx:HTTPService id="userRequest" useProxy="false" method="POST" contentType="application/x-www-form-urlencoded" showBusyCursor="true"/>
于 2009-04-30T03:49:18.137 に答える
0

Flash Player 構成パネルにアクセスしてこの問題を解決し (開発環境でのみ推奨します)、[グローバル セキュリティ] タブで [常に許可] を選択します。

よろしく。

于 2009-09-16T16:30:34.617 に答える
0

最近、Flash Player 10 にアップグレードしましたか? Flash Player 10 では、ポリシー ファイルの動作方法がある程度変更されているため、crossdomain.xml ファイルを更新してこれに対処する必要があります。要するに、Salesforce.com はおそらくユーザーが Flash Player 10 にアップグレードする準備ができていないのでしょう。

于 2008-11-21T03:41:40.840 に答える