claims-based-identitywifwindows-live-idliveid

LiveID API fails - missing token


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...


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