我是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)中将显示返回的所有新手本服务器。
注意:如果我将身份验证令牌输入到浏览器弹出窗口,则应用程序能够正确显示输出到文本区域。
感谢。
答案 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呈现此令牌 认证
您使用的身份验证令牌应与您的用户名不同。是吗?