Friday, July 13, 2012

使用openid4java實作Open ID RP (1)

本文的原始出處是IBM技術文章

為了要實作OpenID Provider的Java Web Application,我認為要先了解如何在Java Web Application中先實作Open ID RP,以了解Open ID的運作方式。

OpenID的官網中,針對Java有提供了許多函式庫可以讓我們來使用,在原始文件中是使用openid4java的函式庫,目前可以取得的版本為0.9.6。

另外,為了要試驗Apache Wicket此framework的功能,我也改用Apache Wicket 1.5.3的版本,它和原始文章所使用的版本(1.3.3),在實作上有一些差異!

還有,本文主要說明概念的部份,實作則在下一篇



Single sign-on authentication


在網路發達的現代社會,一個使用者可能會在許多網站(例如:facebook google yahoo msn),有著不同的使用者帳號(username)以及密碼(password),使用者常會遭遇到帳號密碼忘記的情形,OpenID所要提供的功能就是讓使用者只要擁有一組OpenID的帳號,即可用一組帳密通行各網站。為了達成這個功能,必須要有OpenID Provider來提供OpenID帳號及使用者資訊的管理,另外,在客戶端的網站必須支援OpenID的通訊協定,得以接收來自OpenID Provivder的使用者資訊,並且將資訊寫入自己的網站中。除了網站可以使用OpenID之外,若是企業內部有需要進行資料保全的部份,都可以使用OpenID的相關服務來驗證使用者。

OpenID Relying Party - RP


指的是一個網站或是線上的資源,它們必須通過驗證才得以取用相關的資源。RP必須使用OpenID Provider - OP的服務來驗證使用者。RP可以使用Simple Registration (SReg)或是Attribute Exchange extensions來要求使用OP提供驗證及取得使用者的相關資訊。

OpenID Provider - OP


OpenID Provider提供使用者身份的驗證,一旦使用者通過驗證,OP會依照RP所提的要求(SReg request或是AX request)來提供相關的資訊,但要注意的是OP有可能不會提供所有RP所要求的資訊。基本上OP會在使用者註冊OpenID時,要求使者提供以下資料:email address | full name | date of birth | postal code | country | primary language。

範例程式(RP)-操作流程


  1. 使用者在RP提供的註冊頁面輸入個人的OpenID。
  2. 如果能找到使用者提供的OpenID,就導向該OP進行使用者驗證。
  3. 一旦OP成功驗證使用者,RP會取得OP提供的相關資訊,並且導向RP自訂的資訊檢視頁面。
  4. 在資訊檢視頁面的資料是由OP提供的。

範例程式-OpenID RP服務程式


該文作者使用Apache Wicket 1.3.3進行UI的設計,因此他將OpenID相關的服務獨立成一個類別,放在myopenid.model.RegistrationService.java中。在此類別中,設計了五個method,它們可以完成openid4java中所需的各項操作及物件。

  • getReturnUrl():如果OP驗證使者成功,要導向的頁面。(在本範例中是導向資訊檢視頁面)
  • getConsumerManager():取得openid4java API中進行一連串驗證動作的物件。
  • performDiscoveryOnUserSuppliedIdentifier():進行OpenID的相關探索動作。
  • createOpenIdAuthRequest():建立OP進行驗證所需的AuthRequest物件。
  • processReturn():處理OP回傳的資訊。

範例程式-RP和OP的對話流程


  1. RP先取得使用者提供的Open ID。
  2. Discovery:OP會將使用者提供的OpenID進行正規化(normalize),以決定要和哪個OP進行通訊以及如何進行通訊。
  3. Associasion:RP會和OP建立安全的通訊頻道。
  4. Authentication request:RP要求OP驗證使用者。
  5. Verification:RP要求使用者確認由OP回傳的個人資訊,以確保通訊沒有被干擾。
  6. 當驗證通過後,RP會將使用者導向使用者原先要求的資源或是網站。

No comments:

Post a Comment