国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

CAS單點登錄(SSO)介紹及部署

2019-11-08 02:09:48
字體:
來源:轉載
供稿:網友

介紹

CAS

CAS 是Yale(耶魯)大學的一個開源的企業級單點登錄系統,它的特點:

java (SPRing Webflow/Spring Boot) 服務組件可插拔身份驗證支持(LDAP,Database,X.509,MFA)支持多種協議(CAS,SAML,OAuth,OpenID,OIDC)跨平臺客戶端支持(Java,.Net,php,Perl,Apache等)與uPortal,Liferay,BlueSocket,Moodle,Google Apps等集成

CAS提供了一個友好的開源社區,方便開發者積極支持和貢獻項目。

知識擴展

SSO

單點登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。

業務流程

當用戶第一次訪問應用系統A的時候,因為還沒有登錄會被引導到認證系統中進行登錄;根據用戶提供的登錄信息,認證系統進行身份校驗,如果通過校驗,應該返回給用戶一個認證的憑據(ticket);用戶再訪問別的應用的時候,就會將這個ticket帶上,作為自己認證的憑據,應用系統接受到請求之后會把ticket送到認證系統進行校驗,檢查ticket的合法性。如果通過校驗,用戶就可以在不用再次登錄的情況下訪問應用系統B和應用系統C了。

認證系統功能要求

所有應用系統共享同一個身份認證系統 統一的認證系統是SSO的前提之一。認證系統的主要功能是將用戶的登錄信息和用戶信息庫相比較,對用戶進行登錄認證;認證成功后,認證系統應該生成統一的認證標志(ticket)并立即返還給用戶。另外,認證系統還應該對ticket進行效驗,判斷其有效性。所有應用系統能夠識別和提取ticket信息 要實現SSO的功能,讓用戶只登錄一次,就必須讓應用系統能夠識別已經登錄過的用戶。應用系統應該能對ticket進行識別和提取,通過與認證系統的通訊,能自動判斷當前用戶是否登錄過,從而完成單點登錄的功能。

OAuth 2.0

OAuth是一個關于授權(authorization)的開放網絡標準,在全世界得到廣泛應用,目前的版本是2.0版。

業務流程

OAuth在“客戶端”與“服務提供商”之間設置了一個授權層(authorization layer)?!翱蛻舳恕辈荒苤苯拥卿洝胺仗峁┥獭保荒艿卿浭跈鄬?,以此將用戶與客戶端區分開來?!翱蛻舳恕钡卿浭跈鄬铀玫牧钆疲╰oken),與用戶的密碼不同。用戶可以在登錄的時候,指定授權層令牌的權限范圍和有效期。

“客戶端”登錄授權層以后,“服務提供商”根據令牌的權限范圍和有效期,向“客戶端”開放用戶儲存的資料。

總結

通過上面的概述大家可以很清楚的想明白兩者的適用場景,以面向的用戶不同可以做個劃分,sso服務對象是各個應用系統,oauth服務對象是用戶。

入門

架構

這里寫圖片描述

系統組件

CAS系統架構包括CAS Server和CAS Clients,它們是通過各種協議進行通信的兩個物理組件。

CAS Server

CAS Server是基于Spring框架構建的Java Servlet,其主要職責是通過發出和驗證票證來驗證用戶并授予對使用CAS的服務(通常稱為CAS客戶端)的訪問權限。當用戶在服務器上登錄時向會向用戶發出票證(TGT)并創建SSO會話。通過使用TGT令牌進行瀏覽器重定向,根據用戶的請求向服務發出服務票證(ST)。隨后通過反向通道通信在CAS服務器上驗證ST。這些業務流程在CAS協議文檔中非常詳細地描述。

CAS Clients

“CAS Client”在具體使用中有兩個不同的含義,CAS Client是可以通過所支持的協議與服務器通信的任何啟用CAS的應用程序,CAS Client還可以是可以與各種軟件平臺和應用集成以便經由某種認證協議(例如,CAS,SAML,OAuth)與CAS Server通信的軟件包。客戶端支持多種軟件平臺和應用的CAS客戶端已經開發。

平臺 Apache httpd Server (mod_auth_cas module)Java (Java CAS Client).NET (.NET CAS Client)PHP (phpCAS)Perl (PerlCAS)Python (pycas)Ruby (rubycas-client)應用 Outlook Web application (ClearPass + .NET CAS Client)Atlassian ConfluenceAtlassian JIRADrupalLiferayuPortal

支持的協議

客戶端通過幾種支持的協議與服務器通信。所有支持的協議在概念上類似,但不同的協議對應于特定的應用場景。例如,CAS協議支持委托(代理)認證,SAML協議支持屬性釋放和單點退出。

支持的協議 CAS (versions 1, 2, and 3)SAML 1.1 and 2OpenID ConnectOpenIDOAuth 2.0

示例

為了給大家更為直觀的感受,官方有提供一個示例,可以訪問https://jasigcas.herokuapp.com/cas 來體驗一下。

部署

要想讓CAS服務跑起來,具體的安裝方式有很多,在這里只是演示我的方式,給大家一個參考。

安裝要求

java Oracle jdk 1.8以上tomcat7以上maven3.xgradle2.x

關于上面組件的安裝過程就不在這里展開,大家安裝有疑問可以先到網上搜索,也可以加群與我聯系。

下載安裝包

你可以直接從github上下載這個項目 https://github.com/apereo/cas-gradle-overlay-template,也可以直接訪問下載鏈接 https://github.com/apereo/cas-gradle-overlay-template/archive/master.zip

有人可能好奇為什么要下載這個項目?原因在于我們要覆蓋官方安裝包中默認的屬性,這也是官方提供的一個示例項目。

這個項目體積非常小,因為它依賴的jar包需要下載,這也就是為什么我要安裝Maven的原因,但又由于這個項目包是由gradle來構建的,所以還需要安裝Gradle。

終端操作

接下來大家跟著我的命令執行,應該會有相同的結果。

下載項目

cd /usr/local/srcwget -c https://github.com/apereo/cas-gradle-overlay-template/archive/master.zipunzip master.zip# 你應該看到和我相同的目錄├── cas-gradle-overlay-template│ ├── LICENSE│ ├── README.md│ ├── build.gradle│ ├── cas│ ├── etc│ ├── gradle│ ├── gradle.properties│ ├── gradlew│ ├── gradlew.bat│ └── settings.gradle

編譯項目并下載依賴包

進入項目根目錄,后續的命令除特別說明外都將在這個目錄下執行。

cd cas-gradle-overlay-template

在執行構建命令時會從遠程地址下載 gradle-3.3-bin.zip 壓縮包(下載速度慢,并且中斷之后不會增量下載),所以我建議你通過旋風之類的軟件把這個文件下載并放到下面的目錄里面。

gradle└── wrapper ├── gradle-3.3-bin.zip ├── gradle-wrapper.jar └── gradle-wrapper.properties

如果你像我上面說的那樣做,那還別忘記要修改 gradle-wrapper.properties 文件,把原來的遠程地址替換成相對地址即可。

vim gradle-wrapper.propertiesdistributionUrl=gradle-3.3-bin.zip

另外我建議你在maven中設置遠程倉庫地址為國內的源,因為這樣下載速度會非常快,國外的倉庫下載jar包太慢。國內的源里面推薦使用阿里的源,下面粘貼一段示例代碼。

<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf></mirror>

現在執行命令開始下載項目所需要的依賴包,并構建一個新的war包,我們會部署這個包以啟動CAS服務。

./gradlew clean build

確保你在項目要目錄下執行上面的命令,如果成功你會看到和我類似的結果

Copying configuration to /etc/cas/config:cas:clean:cas:compileJava UP-TO-DATE:cas:processResources UP-TO-DATE:cas:classes UP-TO-DATE:cas:findMainClass:cas:copyConfig:cas:war:cas:bootRepackage SKIPPED:cas:assemble:cas:compileTestJava UP-TO-DATE:cas:processTestResources UP-TO-DATE:cas:testClasses UP-TO-DATE:cas:test UP-TO-DATE:cas:check UP-TO-DATE:cas:buildBUILD SUCCESSFUL

實際的結果可能和我不相同,因為我并非首次執行上面的命令,項目所依賴的包已經下載完了,所以你執行命令的時間可能比我要長。

上面的命令主要是為了讓你下載項目的依賴jar包,雖然實際上我們的war包已經生成,但還沒有配置一些參數以覆蓋官方包中的默認參數,所以現在還得修改配置文件。具體介紹請繼續往下看。

生成證書

由于CAS服務全程使用HTTPS加密通訊協議,所以必須配置證書以達到此目的,否則服務將不會正常服務。

不管你是從證書管理網站上申請的證書,還是像下面示例的這樣,是自己生成的未簽名證書,都可以按照下面的方法進行證書的配置。

第一步:生成key

openssl genrsa -des3 -out cas.example.com.key

第二步:根據上一步的key生成crt證書

openssl req -new -x509 -key cas.example.com.key -out cas.example.com.crt

第三步:根據前面兩步的文件生成PKCS12證書

openssl pkcs12 -export -in cas.example.com.crt -inkey cas.example.com.key -out cas.example.com.p12 -name cas

第四步:把P12證書導入java的密鑰存儲庫文件中

keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore keystore -srckeystore cas.example.com.p12 -srcstoretype PKCS12 -srcstorepass 123456 -alias cas

最后一步操作之后會在當前目錄生成一個文件 keystore,你需要將這個文件復制到項目的配置文件目錄下面。

mv keystore etc/cas/config/-rw-r--r-- 1 xxx xxx 1.1K 2 18 17:17 etc/cas/config/keystore

參數配置

vim etc/cas/config/cas.properties

修改文件之后的內容示例

cas.server.name: https://cas.example.com:8443cas.server.prefix: https://cas.example.com:8443/cascas.adminPagesSecurity.ip=127/.0/.0/.1logging.config: file:/etc/cas/config/log4j2.xml# Embedded Tomcatserver.ssl.keyStore: file:/etc/cas/config/keystoreserver.ssl.keyStorePassWord=123456server.ssl.keyPassword=123456# Accept Users Authenticationcas.authn.accept.users=# Ticket Granting Cookiecas.tgc.signingKey=Ci1kE5-PyQfD0i_a3sH16B32QhwGBbHXOmhR4r36vv0cB0RasLdEb7AI0ykouyMrE5RBbIAxqXvipmQEUA6juQcas.tgc.encryptionKey=Zv0LARlN7g7LxI6wmp6T4sLr2-TiZZ3K5W8pRIWcvO0# Spring Webflowcas.webflow.signing.key=16ua53AWy3PM4rYj6V0rBab_U-X7HvnFpDAVaXMEwwdhiZzTHM5vlYpLzm8HR6jf4DcDbM1_HQxCu6kQGjAOqgcas.webflow.encryption.key=NamwVAyVrXeyrKvs

盡量按照上面的示例配置來修改,以免你掉進未知的“坑”里面。由于修改了配置文件,需要重新執行上面的命令以構建項目。

部署到容器

由于項目中使用了Spring boot,按照官方文檔的描述是可以按照以下的命令進行啟動的,但我在操作時每次都構建到80%左右終端上的命令就停止了。所以我選擇直接將war包部署到tomcat中。

如果你使用Spring boot則使用下面的命令:

./gradlew bootRun

如果你使用tomcat則按照如下步驟操作:

假設你安裝了tomcat把war包部署到webapps目錄中 cp cas/build/libs/cas.war /opt/tomcat/webapps/啟動tomcat /opt/tomcat/bin/startup.sh查詢日志輸出18-Feb-2017 17:19:32.000 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]18-Feb-2017 17:19:32.026 信息 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read18-Feb-2017 17:19:32.029 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["https-jsse-nio-8443"]18-Feb-2017 17:19:32.411 信息 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read18-Feb-2017 17:19:32.412 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]

結束

配置本地hosts讓 cas.example.com 域名指向本地IP 127.0.0.1,打開瀏覽器訪問 https://cas.example.com:8443/cas 可以看到下面的頁面。

這里寫圖片描述

寫到這里關于CAS的安裝就結束了,至于將CAS與具體的業務系統結合,那是屬于下節文章的內容,請關照我后續關于CAS的系列文章。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安龙县| 定远县| 阿尔山市| 呼和浩特市| 右玉县| 玛沁县| 涡阳县| 玉田县| 黄陵县| 海原县| 贡山| 托克逊县| 花莲市| 威宁| 讷河市| 高密市| 伊春市| 迁安市| 海丰县| 天气| 怀柔区| 监利县| 台前县| 石柱| 秦皇岛市| 新乡县| 宜良县| 顺昌县| 博罗县| 平顶山市| 景洪市| 屏山县| 蓬莱市| 广平县| 织金县| 辽阳市| 胶州市| 宣威市| 安龙县| 安顺市| 丹凤县|