ඔබේ වෙබ් අඩවියේ පරිශීලක කලමනාකරණය OpenID වෙත භාර දෙමු : JanRain RPX + PHP

කලින් ලිපි සටහන් දෙකක Single Sign-on හා OpenID සඳහා හඳුන්වාදීමකුත්, OpenID සේවාදායකත්වය පිළිබඳ විස්තරයකුත් කෙරුණා. එම ලිපි කියෙව්වොත් තේරෙනවා දිනෙන් දින OpenID භාවිතා කරන්නන් ප්‍රමාණය වැඩි වන බව. ඒ වගේම OpenID යොදා ගෙන වෙබ් අඩවි නිර්මාණය වඩ වඩාත් පහසු කර ගන්නත් පුලුවන් බව මේ ලිපියෙන් හඳුන්වා දීමට බලාපොරොත්තු වෙනවා.

අපි ‍නිර්මාණය කරන වෙබ් අඩවි තුල පරිශීලකයින් කළමනාකරණය බොහෝ වෙලාවට කරන්නේ බොහෝම ගතානුගතික විදියට. User table එකක් සාදගෙන අලුතින් එන හැම පරිශීලකයෙකුගේම තොරතුරු ඒ table එකේ සඳහන් කරගෙන සිටිනවා. ඇතුල් වීමට අවශ්‍ය වුන වෙලාවට SELECT query එකක් මගින් පරිශීලක නාමය (username) හා රහස් පදය (password) නිවැරදි දැයි බලනවා. ඉන්පසු Session අගයක් ලෙස එම අගයන් තබාගෙන logout වීමේදී එය අගයන් මකා දමනවා.

මේ සියලු දේ වෙනුවට OpenID මගින් පරිශීලකයින්ට ඇතුල් වීමට පහසු කම ලබා දුන්නොත් ප්‍රධාන වශයෙන් පහත වාසි ලබා ගන්න පුලුවන්.

  • පරිශීලකයින්ට අලුතින් ලියාපදිංචි වීමට හෝ පෞද්ගලික තොරතුරු නැවත නැවතත් ලබාදීමට බල කිරීමට අවශ්‍ය නෑ.
  • ලියාපදිංචි වීමේ form, ඒවා සඳහා validation ආදී කරදර වලින් මිදෙන්න පුලුවන්.
  • අමතර user table එකක් බොහෝ වේලාවට අවශ්‍ය වන්නේ නෑ (නමුත් මෙය අවශ්‍යතාවය අනුව වෙනස් වෙන්න පුලුවන්).
  • පරිශීලකයින්ගේ ‍තොරතුරු ගබඩා කර ගනිමින් වැඩි බරක් දරා සිටීමට අවශ්‍ය නෑ.
  • SSL වැනි සංකීර්ණ ආරක්ෂාවන් ලබා දීමේ ක්‍රියාවලීන් වල බරක් දරා සිටින්න අවශ්‍ය නෑ. එය බොහෝ විට OpenID සේවා දායකයින් විසින්ම ලබා දෙනවා.

වෙබ් අඩවි වලින් ලබා දෙන සේවා භාවිතයට පරිශීලකයින් මැලි වන එක ප්‍රධාන හේතුවක් තමයි අලුතින් ලියා පදිංචි වීමේ කරදරය හා පෞද්ගලික තොරතුරු ලබා දීමට ඇති මැලිකම. OpenID භාවිතය මගින් පරිශීලකයින්ට වඩාත් පහසුවෙන් ඔබ ලබා දෙන සේවා පරිහරණය කරන්න පුලුවන්.

OpenID භාවිතයෙන් ඇතිවෙන්න පුලුවන් අවාසි කිහිපයක් පෙල ගස්සවන්න උත්සහ කෙරුවොත්,

  • පරිශීලකයා මොහොතකට තමාගේ අඩවියෙන් පිටතට යැවෙනවා.
  • භාවිතා කිරීමට හැකි පරිශීලකයින් ප්‍රමාණය පාලනය කිරීමට අමතර වෙහෙසක් ගැනීමට සිදු වෙනවා.

අප නිර්මාණය කරන වෙබ් අඩවියට OpenID පහසුකම ලබා දීම  පහසු කර ගැනීමට නිපදවුන plugin තිබෙනවා. CMS යොදාගෙන අඩවි නිර්මාණය ජනප්‍රිය වී ඇති නිසා මෙම CMS බොහෝමයකට අදාල OpenID plugin එක තිබෙනවා.

  • Drupal
  • WordPress (OpenID)
  • SPIP
  • WebGUI
  • MediaWiki
  • DokuWiki
  • phpBB
  • PunBB

මෙහි සම්පූර්ණ ලැයිස්තුව මෙතනින් බලා ගන්න පුලුවන්. බොහෝ විට plugin එක ස්ථාපනය කරලා සරල settings කිහිපයක් හැදු ගමන්ම OpenID පහසුකම ලබා ගන්න පුලුවන්.

මෙම ලිපියෙන් බලාපොරොත්තු වන්නේ වෙනත් සේවාවක් ගැන විස්තර කරන්න. JanRain මගින් ලබා දෙන RPX now යොදා ගනිමින් ඉහත සඳහන් ලැයිස්තුවට අදාල නොවන අවස්ථා වලදී අපට OpenID පහසුකම ලබා ගන්න පුලුවන්. මෙතනදී OpenID යොදාගනිමින් login වීමේ පහසුකම (links) ලබා දෙන තැනේ ඉඳන්, අදාල OpenID සේවාදායකයින් සම්බන්ධ කරගෙන පරිශීලකයින් authenticate කර ගන්න තැන දක්වා ක්‍රියාවලිය RPX now විසින් ඉටු කර දෙනවා. ඉන්පසු එයින් නැවත එවන XML හෝ JSON response එකක් process කර ගැනීම අපට කල හැකියි. RPXnow සම්පූර්ණයෙන් නොමිලේ ලබා දෙන සේවයක් නොවුනත් OpenID සේවාදායකයින් කිහිප දෙනෙක් පමණක් සහය දක්වන ලෙස සැකසුනු නොමි‍ලේ සැපයෙන සේවාවකුත් ඔවුන් ලබා දෙනවා.

මෙහිදී සිදුවිය යුතු ක්‍රියාවලිය සරලව මෙහෙමයි.

  1. මුලින්ම https://rpxnow.com/get වෙත යන්න. ලැබෙන පිටුවේ අපට ලබා ගත හැකි සේවා පැකේජ තිබෙනවා. හැකියාවක් තිබෙනවානම් වාණිජමය සේවාව ලබා ගන්න පුලුවන් ;) . නමුත් මෙතනදි මම තෝරගන්නේ Basic යනුවෙන් තිබෙන නොමිලේ ලැබෙන සේවාව.
  2. Sign Up මත click කලාම ඔබට login වීමට අවශ්‍ය යැයි පැව‍සෙනවා. ඔබට කැමති ගිණුම් වර්ගයක් තෝරාගෙන login වීමට පුලුවන්. මෙම login වීමේ ක්‍රියාවලිය නිරීක්ෂණය කරන්න. මේ RPX වෙතින් ඔබට ලැබෙන සේවයේ ආකාරයයි.
  3. ඉන්පසු ඔබේ වෙබ් අඩවියේ විස්තර කිහිපයක් ඇතුල් කිරීමට අවශ්‍ය වෙනවා. Application Name වෙතට අවශ්‍ය හැඳින්වීමේ නාමයක් ලබා දෙන්න. Domains යටතේ ඔබේ වෙබ් අඩවිය ක්‍රියාත්මක වන domain ඇතුලත් කරන්න. මෙය එකක් හෝ කිහිපයක් වෙන්න පුලුවන්.
  4. දැන් ලැබෙන පිටුවේ Configure Sign-on Widget මත click කරන්න. එහි ඔබේ අඩවියට ඇතුලත් වීමට භාවිතා කිරීමට ඉඩ දිය හැකි OpenID සේවා දායකයින් වම් පැත්තේ කොටුවට drag කර දමන්න. අවසන් වූ පසු Publish To Widget මත click කරන්න. Test Tool මත click කලහොත් ඔබේ තේරීමේ output එක බලා ගන්න පුලුවන්.
  5. නැවත Application->Dashboard වෙත යන්න.
  6. Quick Start Guide මත click කරන්න.

දැන් ඔබ RPXnow වෙතින් පැමිණෙන token එක යොදා ගනිමින් POST request එකක් සිදු කිරීමටත් ඉන්පසුව ලැබෙන පිළිතුර (XML|JSON) process කිරීමටත් server side පිටුවක් ලිවිය යුතුය.  මෙම පිටුව online web server එකක රැඳවිය යුතුයි. එම පිටුවේ සබැඳිය token_url ලෙස අප පසුව භාවිතයට ගන්නවා.

මෙම පිටුවෙන් සිදුවෙන දේ සාරංශයක් ලෙස ගත්තොත්,

  1. Request එකෙන් token යනුවෙන් ඇති POST variable එකේ අගය ලබා ගත යුතුයි.
  2. එම token එක හා ඔබගේ RPXnow API Key එක භාවිතා කරමින් https://rpxnow.com/api/v2/auth_info වෙත POST request එකක් සිදු කල යුතුයි.
  3. පරිශීලකයා අවසරය දුන්නොත් මෙම ක්‍රියාවලිය අවසානයේ නැවත token_url වෙත ඔහුව යොමු කෙරෙනවා. එහිදී ඔබේ පිටුවට ඔහුගේ OpenID credentials ලැබෙනවා. එම credentials භාවිතය ඔබට ලැබෙන පිළිතුර process කිරීම සිදු කරන්න පුලුවන්.

RPXnow API Key එක ඔබට අනන්‍ය වුන එකක්. මෙය ඔබට Application->Dashboard වෙත ගොස් API key මත click කිරීමෙන් ලබා ගන්න පුලුවන්. මේ key එක වෙන කෙනෙක් අතට යවන්න එපා.

පහළ තිබෙන්නේ මෙම token_url පිටුව PHP යොදාගෙන implement කිරීමක්.

[sourcecode language=”php”]
$token = $_POST[‘token’];

$curlOb = curl_init();
curl_setopt($curlOb, CURLOPT_URL,”https://rpxnow.com/api/v2/auth_info”);
curl_setopt($curlOb, CURLOPT_POST, 1);
curl_setopt($curlOb, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlOb, CURLOPT_POSTFIELDS, “apiKey=4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxa3&token={$token}&format=xml”);
$res = curl_exec ($curlOb);
curl_close ($curlOb);

$xml = simplexml_load_string($res);
$id = $xml->profile->identifier;
$display_name = $xml->profile->displayName;
[/sourcecode]

මෙහිදී POST අගය $_POST[‘token’] යොදාගෙන $token variable එකට ලබා ගෙන තිබෙනවා. ඉන්පසු curl tool එක භාවිතා කරමින් https://rpxnow.com/api/v2/auth_info වෙත POST request එකක් යවා තිබෙනවා. මේ POST request එකේ variable තුනක් සඳහා අගයන් ලබාදී තිබෙනවා.

  • apiKey – ඔබේ APIKey එක
  • token – $_POST[‘token’] වෙතින් ලබා ගත් token අගය
  • format – අපට ලැබෙන පිලිතුර XML format එකෙන් ලබා දෙන ලෙසට යවා තිබෙනවා. මෙම parameter එක භාවිතා නොකලොත් අපට ලැබෙන්නේ JSON ආකාරයේ පිළිතුරක්. මම PHP වලදී වැඩියෙන් දන්නේ XML process කරන්න නිසා මේ parameter එක භාවිතා කලා

මෙහිදී curl call එකින් ලැබෙන response එක අපි $res variable එකට ලබා ගෙන තිබෙනවා. දැන් එම variable එකේ තියෙන්නේ පහළ තියෙන ආකාරයේ XML ව්‍යුහයක්.

[sourcecode language=”xml”]


xxxxxxxxx


xxxxxxx@gmail.com


https://www.google.com/accounts/o8/id?id=Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx



xxxxx


xxxxxxx

xxxxxxxx
xxxxxxxx Google
xxxxxxxxxxxxxxx

[/sourcecode]

මේ තිබෙන්නේ Google මගින් authenticate කර නැවත එවූ response එකක්. එක් එක් OpenID සේවාදායකයා මීට වඩා යන්තමින් වෙනස් පිළිතුරු එවන්න පුලුවන්. උදාහරණයකට සාමාන්‍ය OpenID සේවාදායකයෙක් email ලිපිනය එවන්නේ නෑ.

මෙතනදී අපිට පරිශීලකයෙක් හඳුනා ගැනීමටත්, ඔහුව ගබඩා කර ගැනීමටත් යොදා ගන්න පුලුවන් දත්ත දෙකක් තිබෙනවා.

  • displayName
  • identifier

Identifier ඒ පරිශිලකයාට අනන්‍ය වුන අගයක්. මේ නිසා මෙය ඔහුව හඳුනාගන්න භාවිතා කරන්න පුලුවන්. Display Name එක ඔහුව දර්ශනය කරන්න භාවිතා කරන්න පුලුවන්.

කලින් PHP කේතයේ 11,12,13 පේළි වලින් PHP වල SimpleXML parser එක භාවිතා කරලා මේ දත්ත දෙක එළියට අරගෙන පිලිවෙලින් $id සහ $display_name යන variable දෙකට පිටපත් කරලා තිබෙනවා. දැන් අවශ්‍ය නම් මෙම අගයන් දෙක session එකේ තැන්පත් කරන්න පුලුවන් පහත ආකාරයට.

[sourcecode language=”php”]
$_SESSION[‘id’] = $id;
$_SESSION[‘name’] = $display_name;
$_SESSION[‘logged_in’] = true;
[/sourcecode]

Logout වීමේදී මෙම $_SESSION[] variable clear කර දැමිය හැකියි.

ඉහත පලමුවැනි PHP පිටුව save කර PHP සර්වරයක් වෙත upload කරන්න (වෙබ් සර්වරය curl සඳහා සහය දැක්විය යුතුය).

දැන් අපි නැවත අපේ වෙබ් අඩවිය වෙත හැරෙමු. පහත ‍HTML කේතය ඔබේ අඩවියේ login පිටුවේ යටින් (</html> ටැගයට පෙර) පිටපත් කරන්න.

[sourcecode language=”javascript”]


[/sourcecode]

ඉන්පසුව Login වීමට click කල යුතු ‍තැනට වෙනුවට මෙම කේතය පිටපත් කරන්න.

[sourcecode language=”html”]

Sign In

[/sourcecode]

මෙහිදී token_url ඉදිරිපිට your_token_url වෙනුවට ඔබ වෙබ් සර්වරයට upload කල ගොනුවේ ලිපිනය ලබා දෙන්න. අවශ්‍යනම් Sign In පදය වෙනුවට පින්තූරයක් හෝ වෙනත් පදයක් ලබා දෙන්න පුලුවන්.

දැන් ඔබගේ අඩවියට OpenID හා ඔබ RPXnow තුල ලබා දුන් සේවාදායකයින්ගේ ගිණුම් භාවිතා කර පරිශීලකයින්ට ඇතුලු වෙන්න පුලුවන්. අවශ්‍යනම් පසුව භාවිතා කිරීමට පරිශීලකයින් අනන්‍ය වශයෙන් හඳුනා ගැනීමේ දත්ත ලබා දෙන අතරම අනවශ්‍ය මොඩුයලයක් ඔබේ අඩවියෙන් ඉවත් කර ගන්නත් OpenID පහසුකම යොදා ගන්න පුලුවන්.

පහළ පින්තූරයේ තිබෙන්නේ මෙම ක්‍රියාවලිය සරල ලෙස දක්වලා. තේරුම් ගන්න පහසු වෙයි කියලා හිතුන නිසා මේක හැදුවේ :)

9 thoughts on “ඔබේ වෙබ් අඩවියේ පරිශීලක කලමනාකරණය OpenID වෙත භාර දෙමු : JanRain RPX + PHP

  1. ප්‍රයෝජනවත් ලිපියක්. OpenID ගැන නොදැන සිටි බොහෝ දේ මෙයින් දැනගත්තා.
    චමිල ඔබට බොහොම ස්තූතියි.

  2. තේරුනේ නෑ බන්.. අග හරියට එනකොට පිස්සු වගේ.. කෝකටත් ආයෙ කියවල බලන්නම්. :)

    • ඔන්න මචන් මම පින්තූරයකුත් හදලා දැම්මා. මේක කරලා බලනකම් ටිකක් විතර අවුල් වගේ පේන්නේ. කරලා ඉවර වුනාම තමයි තේරෙන්නේ.