隨着公司項目的龐大,單點登錄變得尤為重要,那么怎么實現單點登錄,下面已oauth為標准實現單點登錄。
【特別鳴謝:魔樂科技,附上官網:www.mldn.cn】
1:項目組織結構
本項目為oAuth修改的啟動項目結構,在該結構之中基本定義模塊如下:
1、microauth:定義公共的父pom文件,用於所有相關依賴包配置;
2、microauth-api:定義公共Service接口,同時在該接口上還提供有相應的Fallback配置、Feign配置注解、VO類定義;
3、microauth-eureka-server:Eurea注冊與發現服務,所有微服務都注冊到此處,該服務端口為7001;
4、microauth-provider-dept-8001:定義部門服務信息,該服務使用mldn8001數據庫,同時提供有配置腳本,在本服務之中將主要結合MyBatis進行數據庫操作,該微服務使用的是8001端口;
5、microauth-zuul-gateway-9501:zuul網關服務接口,運行在9501端口;
6、microauth-consumer:消費端微服務,主要通過zuul調用dept微服務;
所有的服務均沒有配置Spring-Security開發包,只提供一個基本訪問處理流程。
修改hosts文件,本次使用到的主機名稱如下:
127.0.0.1 dept-8001.com
127.0.0.1 eureka-7001.com
127.0.0.1 gateway-9501.com
127.0.0.1 oauth-8080.com
127.0.0.1 consumer.com
項目的組織結構如下圖,圖中的oauth認證中心就是我們說的單點登錄服務器,提供認證、授權保存服務;
下面要演示的就是怎么通過web客戶端【springboot】訪問我們的微服務,這里就是如圖的部門微服務;
服務提供者暴露的接口如果是裸露的這是多么可怕的事情,所以我們要做的就很簡單,怎么去訪問我們這個受保護的服務;
現在的系統大都要求支持三高:高並發、高可用、高性能
所以,服務不做集群是不行的,集群你得有多個服務節點不是,你項目當中會有多少個微服務,你每一個微服務都要有多個節點的話,那我客戶端怎么訪問你哦?
注冊中心幫我們解決了這一個難題,把你所有的服務都放到一個中心的位置去,我服務的調用者只關心你這個注冊中心就可以了,此圖為簡要說明,先畫了一個注冊中心,
按理,注冊中心也得集群處理。此圖先不說明。
有的注冊中心還不行,還是不能實現負載均衡呀,所以feign就出來了,feign是個啥玩意,它就是轉門搞負載均衡的,讓你的遠程調用就像是本地的接口調用一樣。
有的feign還不夠,你還得來一層代理網關,幫你代理轉發,那個東西就叫zuul。
2:目錄結構
3:演示
a:啟動注冊中心,將部門微服務、和代理網關注冊到注冊中心當中
b:此時訪問部門微服務是訪問不了,因為加了安全認證
c:啟動CAS單點登錄服務器並訪問
http://mermaid:hello@oauth-server.com:8080/oauth/authorize?client_id=cmldn&response_type=code&redirect_uri=http://www.baidu.com
d:使用curl 獲取access_token
curl -X POST -H "Content-Type:application/x-www-form-urlencoded" -d "grant_type=authorization_code&code=cKXoVK&redirect_uri=http://www.baidu.com" "http://cmldn:cjava@oauth-server.com:8080/oauth/token"
e:拿到access_token就可以訪問我們受保護的資源了
f:訪問zuul代理網關需要登錄
輸入用戶和密碼就可以登錄了
g:通過客戶端【springboot】訪問