Saturday, December 27, 2014

How to Create a Microsoft Login Button using PHP – With Integration tip






How to Create a Microsoft Login Button using PHP – With Integration tip



You can login with major websites like Microsoft, Google, Facebook and Twitter into some websites using a protocol called “OAuth” it is an authentication app that controls access to a website using well known and trusted sites to make login faster and secure. It a subtle form of collaboration and partnership between the participating websites.

What is OAuth?

class="_Tgc">OAuth is an open standard to authorization.title="OAuth" href="http://en.wikipedia.org/wiki/OAuth" target="_blank"> OAuth provides client applications a ‘secure delegated access’ to server resources on behalf of a resource owner. It specifies a process for resource owners to authorize third-party access to their server resources without sharing their credentials.

OAuth Types

After OAuth 1.0 the OAuth 2.0 is the next evolution of the OAuth protocol and is not backwards compatible with OAuth 1.0. OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices. The specification and associated RFCs are developed by the IETF OAuth WG; the main framework was published in October 2012. (It was expected to be finalized by the end of 2010, according to Eran Hammer. However, due to discordant views about the evolution of OAuth, Hammer left the working group.

href="https://harkingbade.s3.amazonaws.com/wp-content/uploads/2014/12/27091242/microsoft-account-login-button.png">class="aligncenter size-full wp-image-1929" src="https://harkingbade.s3.amazonaws.com/wp-content/uploads/2014/12/27091242/microsoft-account-login-button.png" alt="microsoft login button" width="640" height="396" />

What is Microsoft Log-In?

Microsoft Log-in means asking user to grant access to his/her Microsoft live information like email id, username etc. Once your website has been granted access and has all these information about the user it can allow the users to access protected pages on your website.

Setting up Directory and Files

Before we get started you need to create a PHP file named redirect.php. Place this file anywhere in your webspace.

Creating a Microsoft App

If your website is allowing login using Microsoft then your website is considered as an Microsoft app. So you have your website ready now its time to register you website as a Microsoft app. Follow this steps to create a Microsoft app:

  1. Visit href="https://account.live.com/developers/applications" target="_blank" rel="nofollow external">Microsoft apps page.
  2. Now create a Microsoft app
  3. Select API Settings and for redirect URL pass URL pointing to the redirect.php file.
  4. You can find the Client ID and Client Secret under App Settings

Creating Login with Microsoft Button

When user clicks on Login button you need to run this code to redirect user to Microsoft Live website so that user can grant permission to your app to access their information
id="highlighter_890494" class="syntaxhighlighter ">class="lines">class="number">1class="content">class="variable">$client_id class="plain">= class="string">""class="plain">;
class="number">2class="content">class="variable">$redirect_uri class="plain">= class="string">""class="plain">;
class="number">3class="content">class="variable">$scopes class="plain">= class="string">"wl.basic,wl.offline_access,wl.signin,wl.emails"class="plain">;
class="number">4class="content">
class="number">5class="content">class="plain">header(class="string">"Location: " class="plain">. class="string">"href="https://login.live.com/oauth20_authorize.srf?client_id=">https://login.live.com/oauth20_authorize.srf?client_id=" class="plain">. class="variable">$client_id class="plain">. class="string">"&scope=" class="plain">. class="variable">$scopes class="plain">. class="string">"&response_type=token&redirect_uri=" class="plain">. class="variable">$redirect_uriclass="plain">);

Scopes represent the list of permissions for the app. You need to pass a comma separated list of permissions. href="http://msdn.microsoft.com/en-us/library/hh243646.aspx" target="_blank" rel="nofollow external">List of all scopes.

Populate the $client_id and $redirect_uri variables.

Once user has given access to the app, Microsoft will redirect user back to the redirect URI. Now you need to retrieve an access token which acts like a permission to get user information.

In the redirect.php file you can retrieve access token by running this code
class="lines">class="line alt1">class="number">01class="content">class="plain"><?php
class="line alt2">class="number">02class="content">
class="line alt1">class="number">03class="content">class="spaces">  class="variable">$client_id class="plain">= class="string">""class="plain">;
class="line alt2">class="number">04class="content">class="spaces">  class="variable">$client_secret class="plain">= class="string">""class="plain">;
class="line alt1">class="number">05class="content">class="spaces">  class="variable">$redirect_uri class="plain">= class="string">""class="plain">;
class="line alt2">class="number">06class="content">
class="line alt1">class="number">07class="content">class="spaces">  class="comments">//$_GET["code"] is the authorization code
class="line alt2">class="number">08class="content">class="spaces">  class="keyword">ifclass="plain">(isset(class="variable">$_GETclass="plain">[class="string">"code"class="plain">]))
class="line alt1">class="number">09class="content">class="spaces">  class="plain">{
class="line alt2">class="number">10class="content">class="spaces">    class="comments">//user granted permission
class="line alt1">class="number">11class="content">
class="line alt2">class="number">12class="content">class="spaces">    class="comments">//get access token using the authorization code
class="line alt1">class="number">13class="content">
class="line alt2">class="number">14class="content">class="spaces">    class="variable">$url class="plain">= class="string">"href="https://login.live.com/oauth20_token.srf">https://login.live.com/oauth20_token.srf"class="plain">;
class="line alt1">class="number">15class="content">class="spaces">        class="variable">$fields class="plain">= class="keyword">arrayclass="plain">(class="string">"client_id" class="plain">=> class="variable">$client_idclass="plain">, class="string">"redirect_uri" class="plain">=> class="variable">$redirect_uriclass="plain">, class="string">"client_secret" class="plain">=> class="variable">$client_secretclass="plain">, class="string">"code" class="plain">=> class="variable">$_GETclass="plain">[class="string">"code"class="plain">], class="string">"grant_type" class="plain">=> class="string">"authorization_code"class="plain">);
class="line alt2">class="number">16class="content">
class="line alt1">class="number">17class="content">class="spaces">        class="keyword">foreachclass="plain">(class="variable">$fields class="keyword">as class="variable">$keyclass="plain">=>class="variable">$valueclass="plain">) { class="variable">$fields_string class="plain">.= class="variable">$keyclass="plain">.class="string">"="class="plain">.class="variable">$valueclass="plain">.class="string">"&"class="plain">; }
class="line alt2">class="number">18class="content">class="spaces">        class="plain">rtrim(class="variable">$fields_stringclass="plain">, class="string">"&"class="plain">);
class="line alt1">class="number">19class="content">
class="line alt2">class="number">20class="content">class="spaces">        class="variable">$ch class="plain">= curl_init();
class="line alt1">class="number">21class="content">
class="line alt2">class="number">22class="content">class="spaces">        class="plain">curl_setopt(class="variable">$chclass="plain">,CURLOPT_URL, class="variable">$urlclass="plain">);
class="line alt1">class="number">23class="content">class="spaces">        class="plain">curl_setopt(class="variable">$chclass="plain">,CURLOPT_HTTPHEADER, class="keyword">arrayclass="plain">(class="string">"Content-Type: application/x-www-form-urlencoded"class="plain">));
class="line alt2">class="number">24class="content">class="spaces">        class="plain">curl_setopt(class="variable">$chclass="plain">,CURLOPT_POST, class="functions">countclass="plain">(class="variable">$fieldsclass="plain">));
class="line alt1">class="number">25class="content">class="spaces">        class="plain">curl_setopt(class="variable">$chclass="plain">,CURLOPT_POSTFIELDS, class="variable">$fields_stringclass="plain">);
class="line alt2">class="number">26class="content">class="spaces">        class="plain">curl_setopt(class="variable">$chclass="plain">,CURLOPT_RETURNTRANSFER,1);
class="line alt1">class="number">27class="content">
class="line alt2">class="number">28class="content">class="spaces">        class="variable">$result class="plain">= curl_exec(class="variable">$chclass="plain">);
class="line alt1">class="number">29class="content">class="spaces">        class="variable">$result class="plain">= json_decode(class="variable">$resultclass="plain">);
class="line alt2">class="number">30class="content">
class="line alt1">class="number">31class="content">class="spaces">        class="plain">curl_close(class="variable">$chclass="plain">);
class="line alt2">class="number">32class="content">
class="line alt1">class="number">33class="content">class="spaces">    class="comments">//this is the refresh token used to access Microsoft Live REST APIs
class="line alt2">class="number">34class="content">class="spaces">        class="variable">$access_token class="plain">= class="variable">$resultclass="plain">->access_token;
class="line alt1">class="number">35class="content">class="spaces">        class="variable">$refresh_token class="plain">= class="variable">$resultclass="plain">->refresh_token;
class="line alt2">class="number">36class="content">class="spaces">  class="plain">}
class="line alt1">class="number">37class="content">class="spaces">  class="keyword">else
class="line alt2">class="number">38class="content">class="spaces">  class="plain">{
class="line alt1">class="number">39class="content">class="spaces">    class="functions">echo class="string">"An error occured"class="plain">;
class="line alt2">class="number">40class="content">class="spaces">  class="plain">}
class="line alt1">class="number">41class="content">
class="line alt2">class="number">42class="content">class="plain">?>
Populate variable $client_id,$client_secret and $redirect_uri.

Finally we got $access_token and $refresh_token. $access_token usually expires in 1 hour therefore $refresh_token is used to get a new access token after every 1 hour.

If access token is expired then you are likely to get an error in HTTP response content while making requests to REST APIs.

You can retrieve new access token using this function
id="highlighter_818389" class="syntaxhighlighter ">class="lines">class="number">01class="content">class="keyword">function class="plain">new_access_token(class="variable">$refresh_tokenclass="plain">)
class="number">02class="content">class="plain">{
class="number">03class="content">class="spaces">    class="variable">$url class="plain">= class="string">"href="https://login.live.com/oauth20_token.srf">https://login.live.com/oauth20_token.srf"class="plain">;
class="number">04class="content">class="spaces">    class="variable">$fields class="plain">= class="keyword">arrayclass="plain">(class="string">"client_id" class="plain">=> class="variable">$client_idclass="plain">, class="string">"redirect_uri" class="plain">=> class="variable">$redirect_uriclass="plain">, class="string">"client_secret" class="plain">=> class="variable">$client_secretclass="plain">, class="string">"grant_type" class="plain">=> class="string">"refresh_token"class="plain">, class="string">"refresh_token" class="plain">=> class="variable">$refresh_tokenclass="plain">);
class="number">05class="content">
class="number">06class="content">class="spaces">    class="keyword">foreachclass="plain">(class="variable">$fields class="keyword">as class="variable">$keyclass="plain">=>class="variable">$valueclass="plain">) { class="variable">$fields_string class="plain">.= class="variable">$keyclass="plain">.class="string">"="class="plain">.class="variable">$valueclass="plain">.class="string">"&"class="plain">; }
class="number">07class="content">class="spaces">    class="plain">rtrim(class="variable">$fields_stringclass="plain">, class="string">"&"class="plain">);
class="number">08class="content">
class="number">09class="content">class="spaces">    class="variable">$ch class="plain">= curl_init();
class="number">10class="content">
class="number">11class="content">class="spaces">    class="plain">curl_setopt(class="variable">$chclass="plain">,CURLOPT_URL, class="variable">$urlclass="plain">);
class="number">12class="content">class="spaces">    class="plain">curl_setopt(class="variable">$chclass="plain">,CURLOPT_HTTPHEADER, class="keyword">arrayclass="plain">(class="string">"Content-Type: application/x-www-form-urlencoded"class="plain">));
class="number">13class="content">class="spaces">    class="plain">curl_setopt(class="variable">$chclass="plain">,CURLOPT_POST, class="functions">countclass="plain">(class="variable">$fieldsclass="plain">));
class="number">14class="content">class="spaces">    class="plain">curl_setopt(class="variable">$chclass="plain">,CURLOPT_POSTFIELDS, class="variable">$fields_stringclass="plain">);
class="number">15class="content">class="spaces">    class="plain">curl_setopt(class="variable">$chclass="plain">,CURLOPT_RETURNTRANSFER,1);
class="number">16class="content">
class="number">17class="content">class="spaces">    class="variable">$result class="plain">= curl_exec(class="variable">$chclass="plain">);
class="number">18class="content">class="spaces">    class="variable">$result class="plain">= json_decode(class="variable">$resultclass="plain">);
class="number">19class="content">
class="number">20class="content">class="spaces">    class="plain">curl_close(class="variable">$chclass="plain">);
class="number">21class="content">
class="number">22class="content">class="spaces">    class="variable">$access_token class="plain">= class="variable">$resultclass="plain">->access_token;
class="number">23class="content">
class="number">24class="content">class="spaces">    class="keyword">return class="variable">$access_tokenclass="plain">;
class="number">25class="content">class="plain">}

Making calls to REST API

You can find list of all REST APIs at href="http://msdn.microsoft.com/en-us/library/hh243648.aspx" target="_blank" rel="nofollow external">Microsoft REST API reference. All the requests to these APIs must be made using the access token.

To retrieve user profile information you need to make a GET request of such kind
id="highlighter_962250" class="syntaxhighlighter ">class="lines">class="number">1class="content">class="functions">echo class="functions">file_get_contentsclass="plain">(class="string">"href="https://apis.live.net/v5.0/me?access_token=">https://apis.live.net/v5.0/me?access_token=" class="plain">. class="variable">$access_tokenclass="plain">);

Integrating Microsoft Login in WordPress

WordPress is made on PHP therefore all code will be same for authorizing user and getting profile information. To create a redirect URL in WordPress use href="http://qnimate.com/integrating-ajax-in-wordpress/" target="_blank" rel="nofollow external">WordPress AJAX API.

This guide was first published in script-tutorials dot com.








No comments:

Post a Comment