如何使用Flex对Freshbooks API进行身份验证?

时间:2009-11-23 15:29:30

标签: flex httpservice freshbooks-api

我是Flex(FLex Builder 3.0)的新手,我正在创建一个简单的应用程序,它基本上只通过HTTPS对Freshbooks API(www.freshbooks.com)进行身份验证。没有发送任何其他内容。

这是我到目前为止所拥有的:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
    <![CDATA[           

        import mx.collections.ArrayCollection;
        import mx.rpc.events.ResultEvent;   
        import mx.utils.Base64Encoder;  

        private function authAndSend(service:HTTPService):void
        {
            var encoder:Base64Encoder = new Base64Encoder();
            encoder.insertNewLines = false; 
            encoder.encode("<freshbooks auth token>:X"); 
           //for some reason, freshbooks says that the authentication token 
           //is the username, and the password could just be a dummy value.

            service.headers = {Authorization:"Basic " + encoder.toString()};                                                               
            service.send();
        }           

        private function freshBooksHandler(event:ResultEvent):void{
            txtArea1.text = event.result.toString();
        }

    ]]>
</mx:Script>

<mx:HTTPService id="freshBooksService" url="https://myaccount.freshbooks.com/api/2.1/xml-in"
    result="freshBooksHandler(event)" resultFormat="xml">       
</mx:HTTPService>

<mx:Button x="59" y="48" label="Button" click="authAndSend(freshBooksService)"/>
<mx:TextArea x="59" y="78" width="401" height="242" id="txtArea1"/>

</mx:Application>

问题是,当我点击按钮时,浏览器会弹出一个弹出窗口,询问我的用户名和密码到FreshBooks服务。

我如何对其进行编码,使得用户名(由freshbooks提供的身份验证令牌)将从Flex本身而不是浏览器发送到服务器?我的预期结果是浏览器没有弹出窗口,并且文本区域(txtArea1)中将显示返回的所有新手本服务器。

注意:如果我将身份验证令牌输入到浏览器弹出窗口,则应用程序能够正确显示输出到文本区域。

感谢。

2 个答案:

答案 0 :(得分:1)

为了帮助任何想要在未来开始的人,这是一个例子:

             

        // SETUP before any transactions with the web service
        private function setup():void {
            freshCom.setRemoteCredentials(authToken, "x");
        }
        // Fetches a the list of categories from the FreshBooks server
        private function getCategories():void {
            var categoryRequest:XML = <request method='category.list' />;
            freshCom.send(categoryRequest);
        }
        private function handleResult(event:ResultEvent):void {
            // insert breakpoint here to view result
        }   
    ]]>
</mx:Script>
<mx:HTTPService id="freshCom"  url="{serviceURL}" result="handleResult(event)" method="POST" contentType="application/xml" />

答案 1 :(得分:0)

如果我记得,如果提供的凭据失败,您将获得浏览器身份验证窗口。

来自FreshBook API文档:

  

为您启用API访问后   帐户,您将获得一个独特的   认证令牌。对于每个API   要求你做,你需要   使用基本HTTP呈现此令牌   认证

您使用的身份验证令牌应与您的用户名不同。是吗?