OAuth เป็น open standard สำหรับ APIs ของการ authentication ซึ่งจะทำให้ปลอดภัยและง่ายต่อการพัฒนาระบบงาน
โดยถ้าใครเคยใช้ web ที่มีการ authentication จาก twitter account แล้วนั้นจะเห็นหน้าจอเหล่านี้ ซึ่ง Twitter ก็เป็น OAuth Service Provider ที่ให้เราๆ ท่านๆใช้งานกัน และในบทความนี้ก็จะลองใช้ OAuth Service Provider ของ twitter เช่นกันครับ


ถ้าอยากทำแบบนี้ใน Grails application บ้างล่ะ ?? ทำอย่างไร ซึ่งแน่นอนว่าใน Grails มี OAuth plugin ให้ใช้เช่นกัน ดังนั้นเรามาดูว่าใช้งานกันอย่างไร
ขั้นตอนการพัฒนา
1. สร้าง Grails application ชื่อ my_oauth ดังนี้
>grails create-app my_oauth
2. ติดตั้ง OAuth plugin ดังนี้
>cd my_oauth
>grails install-plugin oauth-plugin
หรือ ทำการ download OAuth plugin มา แล้วติดตั้งดังนี้
>grails install-plugin c:\my-path\grails-oauth-xxx.zip
3. ทำการ config ค่า parameters ต่างๆ ที่จำเป็นในการใช้งาน OAuth service provider ของ Twitter ใน file /conf/Config.groovy ดังนี้
oauth {
twitter {
requestTokenUrl="http://twitter.com/oauth/request_token"
accessTokenUrl="http://twitter.com/oauth/access_token"
authUrl="http://twitter.com/oauth/authorize"
consumer.key="xxx"
consumer.secret="yyy"
}
}
คำถาม
ค่าของ consumer.key และ consumer.secret เอามาจากไหน ?
คำตอบ
เอามาจากการ register ใน twitter ตาม url นี้ http://twitter.com/oauth และทำการ register new application โดยจะมีแบบ form ให้ใส่ข้อมูลต่างๆ แล้วทำการ save ไปจะได้ consumer.key และ consumer.secret มานะครับ
ขั้นตอนการ Register เป็นดังรูป


4. สร้าง controller ชื่อ timeline ขึ้นมา เพื่อใช้สำหรับดึงข้อมูลจาก user timeline [ XML ] ใน twitter ดังนี้
>grails create-controller timeline
และแก้ไข code ใน file /grails-app/controllers/TimelineController.groovy ดังนี้
class TimelineController {
def apiURL = "http://twitter.com/statuses/user_timeline.xml"
def oauthService
def index = {
if (session.oauthToken == null) {
redirect(uri:"/")
}
if (params?.apiURL)
apiUrl = params.apiURL
def response = oauthService.accessResource(apiURL, 'twitter', [key:session.oauthToken.key, secret:session.oauthToken.secret])
def statuses = JSON.parse(response)
render statuses;
}
}
5. แก้ไข file /grails-app/views/index.gsp ดังนี้
<html>
<head>
<title>Welcome to Grails</title>
<meta name="layout" content="main" />
</head>
<body>
<div>
<g:oauthLink consumer="twitter" returnTo="[controller:'timeline']">
<h3>Login with</h3>
<img src="${resource(dir:'images',file:'twitter-logo.png')}" width="155" height="36"
style="border: 0; float: left" />
</g:oauthLink>
</div>
</body>
</html>
6. ทำการ run application ด้วยคำสั่ง
>grails run-app
และเข้าไปที่ http://localhhost:8080/my_oauth/ แล้วจะสามารถใช้งานดังรูป



โดยสุดท้ายจะวิ่งไปทำงานตาม callback ทีี่กำหนดไว้ครับ ถือเป็นอันสำเร็จของการใช้งานแล้ว เพียงเท่านี้ก็สามารถใช้งาน OAuth service provider จาก Twitter ได้แล้วครับ
ที่มา
- OAuth Plugin
- Grails OAuth and LinkedIn APIs
December 28th, 2009 at 4:52 pm
เจ๋งไปเลยครับ .. อยากได้อยู่พอดี