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資料就成功了







