1.先在原本IDP(XXauth)程式新增下列檔案及內容,POM的cnclibs更新至0.0.6.8
1-1: 新增package再加入xxscopes.java檔案
src/main/java/scopes/xxscopes.java
1-2: 新增檔案scopes.spi.CNCScopes
src/main/resources/META-INF/services/scopes.spi.CNCScopes
內容目前只有一行:scopes.XXscopes
1-3: 新增src/main/java/scopes/XXscopes.java檔案內容,將相關字詞改為自己的xxscopes
package scopes; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scopes.spi.CNCScopes; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * 臺中市客制化的Scopes */ public class tcscopes implements CNCScopes { private static final Logger logger = LoggerFactory.getLogger(tcscopes.class); public static final Map<String, String> ASMapping; static { ASMapping = new HashMap(); try { PropertiesConfiguration properties; properties = new PropertiesConfiguration("tcscopes.properties"); //properties.setReloadingStrategy(new FileChangedReloadingStrategy()); Iterator<String> it = properties.getKeys(); while (it.hasNext()) { String key = it.next(); ASMapping.put(key, properties.getString(key, "")); } } catch (ConfigurationException ex) { logger.error(ex.getLocalizedMessage()); } } @Override public Map<String, String> getCNCScopes() { return this.ASMapping; } }
1-4: 新增API讀取客製化欄位名稱檔案
src/main/resources/XXscopes.properties
xxscopes.properties內容為:
scope欄位英文名=scope欄位中文名
例如: xxstuffdata=某縣市服務
(scope名稱不可以和內建的scope名相同,否則mongo讀取錯誤就死了~沒錯就是我這個白癡)
1-5: 新增測試程式
src/test/java/TestScopes.java
內容為:
import org.junit.Test; import scopes.CNCScopeService; import java.util.Map; public class TestScopes { @Test public void doTest(){ CNCScopeService service = CNCScopeService.getInstance(); Map<String,String> scopes = service.getCNCScopes(); System.out.println(scopes.get("tcstaffdata")); } }
將scopes.get("改為xxscopes.properties裡寫入的英文欄位名")
IDP的部分就改完了,重新編譯發布authserver成功就做完一半( 我就是死在這裡@@)
2.下載CncResource程式,新增分支xx_resource
修改CNCAPIResource.java程式,將不需要的scope去掉或新增自訂的scope
並在POM檔案中納入自己的xxauth專案程式
重新編譯發布,會在IDP主機跑一個獨立的程式讓外部應用服務呼叫
3.測試
3-1:下載cncdefault程式,POM納入自己的xxauth專案程式
3-2: 修改client.properties檔案,brandname可自訂,其他設定要配合igogo大神開發的localApp測試程式先不做修改
brandname=API檢測 redirecturi=https://localhost:8443/app/callback contactname=愛狗狗 contactemail=igogo@edu.tw contactphone=0910 allowingscopes=openid,openid2,email,profile,guid creator=igogo
3-3: 上傳到IDP主機執行jar,以取得client id & secret用作測試
要把client.properties檔案拉出來到跟cncdefault.jar放在一起,才執行下列指令
clientid 是由brandname計算出來, 目前brandname 不可重覆
執行指令: java -jar cncdefault-0.0.1.jar ./client.properties
建立後,查詢mongo指令
mongo
show databases
use XXstore
show collections
db.cncspstore.find()
紀錄查詢到的id&secrets
4. 本地端程式檢測
需參考igogo的localApp
4-1: 將各IDP使用的cert憑証轉換成 jks 放到cert中 (需使用java keytool程式,所在位置依照各作業系統JAVA安裝目錄有所不同)
"C:\Program Files\Java\jre1.8.0_161\bin\keytool.exe" -importcert -file "XX.cer" -keystore XX.jks -alias XX.sso.edu.tw
密碼請打changeit
修改idpconfig.json檔案,將剛才取到的client id & secret修改加入
各項scope的endpoint改為自己IDP的網域名
4-2: 執行
4-2-1:如果已預先載入cert的jks
java -jar localApp.jar --idp.config=idpconfig.json
4-2-2:或手動指定載入jks的路徑
java -jar localApp.jar --idp.config=idpconfig.json --jks=.\cert\tp.jks
4-3: 在本地端打開瀏覽器輸入網址localhost
如果看到IDP帳密登入首頁,再輸入帳密取到scope資料就成功了