Question

I'm trying to retrieve some information from the LiveID API but am getting the error:

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

the code is relatively simple; I'm including the library, calling the initialiser with the nameidentifier claim I get from WIF and then requesting the me path.

from the error message I surmise I failed to provide an access token... but wouldn't my app have this already since I successfully retrieved the claim?

here's my code:

<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
});

* update *

it occurred to me perhaps I need to log into the system so I now have:

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

but same error...

Was it helpful?

Solution

so it was a little more complicated... apparently one has to create an application with the LiveID system at:

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

the site give you a ClientID and then the code needs to be like this:

<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);
});

interestingly, the ekkis I see myself logged in as everywhere doesn't appear anywhere and I'm confused now but I think I've been using a Passport account, thinking it was a LiveID account. I'm not sure I understand what the difference is but now that I've configured my LiveID account to have a first/last name it all works.

one final note: creating the app on the live.com site requires one to provide a return url. when the WL.login() gets called, the browser pops up a window requesting the user for permissions (even though s/he has already signed on). When the user clicks Ok, the return url is loaded INTO THAT WINDOW. grr... so now you have to have a special page that all it does is close the window (unless someone else here can suggest how it's supposed to work).

* update *

what I had wanted was the bloody e-mail (I can get it from all the other IPs). so to do that:

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

and then:

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

that will get the e-mail address associated with the account. there are other e-mails available, see: http://msdn.microsoft.com/en-us/library/hh243648.aspx#user

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top