0

我正在尝试从 LiveID API 检索一些信息,但出现错误:

The provided request does not include an access token. An access token is
required in order to request this resource.

代码比较简单;我包括库,使用nameidentifier从 WIF 获得的声明调用初始化程序,然后请求me路径。

从错误消息中我推测我未能提供访问令牌......但是自从我成功检索到声明后,我的应用程序是否已经有了这个?

这是我的代码:

<script src="https://js.live.net/v5.0/wl.js" type="text/javascript"></script>

<script type="text/javascript">
WL.init({ client_id: 'O0UpnnhoiFljBJAtTxhVliu4qtbUWoEVxdgfK7SBR+M=' });
WL.api({ path: "me", method: "GET" }, function (response) {
    // response.error.message
});

* 更新 *

我突然想到,也许我需要登录系统,所以我现在有:

WL.init({ client_id: 'O0UpnnhoiFljBJAtTxhVliu4qtbUWoEVxdgfK7SBR+M=' });
WL.login();
WL.api({ path: "me", method: "GET" }, function (response) {

但同样的错误......

4

1 回答 1

1

所以它有点复杂......显然,必须在以下位置使用 LiveID 系统创建一个应用程序:

https://manage.dev.live.com/

该站点为您提供一个 ClientID,然后代码需要如下所示:

<script src="https://js.live.net/v5.0/wl.js" type="text/javascript"></script>
<script type="text/javascript">
WL.init({ client_id: '#YOUR-CLIENT-ID-HERE#' });
WL.login({ scope: ["wl.signin"] });
WL.api({ path: "me", method: "GET" }, function (response) {
    alert(response.first_name + ' ' + response.last_name);
});

有趣的是,我看到自己登录的ekkis并没有出现在任何地方,我现在很困惑,但我想我一直在使用 Passport 帐户,认为它是 LiveID 帐户。我不确定我是否理解有什么区别,但现在我已经将我的 LiveID 帐户配置为具有名字/姓氏,这一切都可以正常工作。

最后一点:在 live.com 网站上创建应用程序需要提供返回 url。当WL.login()被调用时,浏览器会弹出一个窗口,请求用户授予权限(即使他/她已经登录)。当用户单击 Ok 时,返回 url 被加载到那个窗口中。grr ...所以现在你必须有一个特殊的页面,它所做的就是关闭窗口(除非这里的其他人可以建议它应该如何工作)。

* 更新 *

我想要的是该死的电子邮件(我可以从所有其他 IP 获得)。这样做:

WL.login({ scope: ["wl.signin", "wl.emails"] });

接着:

WL.api({ path: "me", method: "GET" }, function (response) {
    $('#Auth .SignedIn').html(response.emails.account);
});

这将获得与该帐户关联的电子邮件地址。还有其他可用的电子邮件,请参阅:http: //msdn.microsoft.com/en-us/library/hh243648.aspx#user

于 2011-07-25T06:18:56.447 回答