斯琦
摘 要:后勤支持管理系統(tǒng)服務于整個渤海油田的后勤保障工作。渤海油田范圍內的所有海上平臺及基地等內、外部單位,均需使用該系統(tǒng)進行海上后勤管理的保障工作。故此,該系統(tǒng)不僅僅服務于企業(yè)內部,還有很多外部單位也需要訪問。同時,隨著渤海油田信息化建設的不斷深入,以及國家對國有企業(yè)信息系統(tǒng)安全等保要求的逐步提升,原來基于內網環(huán)境下的LDAP協(xié)議的AD域登錄模式,已經不能滿足渤海油田信息化的安全要求。文章探討如何采用基于SAML的ADFS聯(lián)合身份驗證,實現(xiàn)用戶身份驗證的安全性,保證渤海油田后勤支持管理系統(tǒng)的安全外網訪問,以供參考。
關鍵詞:ADFS;安全管理;后勤管理;渤海油田
中圖分類號:TP311.52;TP309.2文獻標識碼:A文章編號:1674-1064(2021)09-0-04
DOI:10.12310/j.issn.1674-1064.2021.09.020
1 概況
后勤支持管理系統(tǒng),服務于渤海油田的后勤業(yè)務管理,面向內外部單位提供后勤業(yè)務系統(tǒng)支撐。后勤支持管理系統(tǒng)通過PC、移動終端(手機)等途徑采集后勤作業(yè)數(shù)據(jù),通過PC端瀏覽器及移動端App向用戶提供服務。系統(tǒng)采用PAAS云+IAAS云架構,應用服務器搭建在PAAS云,數(shù)據(jù)庫服務器搭建在IAAS云,依托總公司PAAS云\IAAS云服務器資源,向系統(tǒng)提供計算、存儲、網絡、負載平衡等能力。
后勤支持管理系統(tǒng)采用業(yè)內主流的Java EE三層架構設計,PC端采用B/S方式實現(xiàn)。移動App端采用總公司移動云,系統(tǒng)通過數(shù)據(jù)接口與App端進行業(yè)務數(shù)據(jù)對接。
后勤支持管理系統(tǒng)主要使用以下核心技術:表現(xiàn)層采用Spring MVC做控制,HTML做頁面展現(xiàn),CSS樣式做頁面美化,ECharts做曲線,Ajax做數(shù)據(jù)交互。業(yè)務層主框架使用SpringBoot,使用流程工具,加入消息引擎做消息推送,項目根據(jù)業(yè)務情況,自主開發(fā)調控模型來做調控算法。持久層采用MybatisPlus做數(shù)據(jù)持久化,HikariCP建立數(shù)據(jù)庫連接池。
2 現(xiàn)狀與要求
后勤支持管理系統(tǒng)之前使用系統(tǒng)自己的用戶密碼管理體系,沒有與AD對接。因為總公司系統(tǒng)安全等保的要求,如果需要提供外網訪問的系統(tǒng),均需要保證用戶身份驗證的安全性,必須采用基于SAML的ADFS聯(lián)合身份驗證方案。需要按照以下流程完成ADFS聯(lián)合身份驗證。
ADFS用戶認證流程圖中一共分三個角色,如圖1所示:
Server Provider(SP):提供服務和資源的服務提供者;
Identity Provider(IDP):用來身份鑒別的服務器,主要是認證用戶,同時生成ADFS服務器(SAML斷言);
Client:用戶訪問服務的客戶端,比如瀏覽器。
驗證步驟要求主要如下:
用戶嘗試訪問SP提供的服務。
SP根據(jù)配置生成一個SAML格式的身份驗證請求數(shù)據(jù)包。配置包括ADFS服務器地址、證書、IDP返回SP消息數(shù)據(jù)的URL地址、身份認證協(xié)議等信息,通過瀏覽器重定向到ADFS服務器進行SAML身份認證。
IDP解碼SAML請求,并對用戶進行身份驗證,IDP要求提供有效登錄憑據(jù)以驗證用戶身份。
IDP生成一個SAML響應,其中包含經過驗證的用戶的用戶名等信息。按照SAML 2.0規(guī)范,此響應將使用IDP的DSA/RSA公鑰和私鑰進行數(shù)字簽名。
IDP將信息返回到用戶的瀏覽器。根據(jù)配置的返回路徑,瀏覽器將該信息轉發(fā)到SP。
SP使用IDP的公鑰驗證SAML響應。如果成功驗證該響應,SP則會將用戶重定向到目標網址。當認證步驟中發(fā)生認證錯誤時,SP通過瀏覽器向當前用戶顯示明確的錯誤信息,如密碼錯誤、密碼過期、賬號已鎖定等。
用戶成功登錄系統(tǒng)[1]。
3 ADFS登錄的方法
在用戶訪問站點(后勤支持管理系統(tǒng)網站)時,初始化時調用后勤項目的登錄接口。
登錄接口通過配置信息,生成數(shù)據(jù)包,并把地址轉發(fā)到ADFS服務器登錄地址。
使用ADFS界面作為登錄界面,由用戶開始填寫登錄信息。
執(zhí)行登錄時將登錄信息發(fā)送到IDP服務中。
由IDP來做用戶憑證的信息認證,經過驗證信息后再生成數(shù)據(jù)包,響應給瀏覽器。
瀏覽器拿到IDP的響應后,去訪問后勤系統(tǒng)的ssoLogin接口。
ssoLogin接口對密鑰/公鑰及token的數(shù)據(jù)處理后,然后使用公鑰驗證IDP服務的響應,如IDP服務響應并返回“成功”狀態(tài),將瀏覽器頁面重定向到后勤系統(tǒng)首頁并進行頁面渲染;否則在瀏覽器頁面渲染ADFS驗證失敗頁面。
后勤支持管理系統(tǒng)向用戶授權訪問系統(tǒng)的權限。
4 ADFS集成配置說明
使用spring框架實現(xiàn)saml協(xié)議認證:spring-security-saml2-core。
信息配置:
sp:
# base url
base_url: http://localhost:9090
# Entity ID of the SP
entity_id: http://mock-sp
# Private key used to sign the SAML response
private_key: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDQRsCf6qU0DYkoFIJUhNlMxJFKMPsEvK+u3rcaBIZcyWX4Cv5OU3xtcCAg6mqRwMRFYFDNdGgR0XLTaHAOcJpR7cXYnYc0Wa6Kh8KSstgZrCl+WdqCtuUS6bMrrAdSq6HpoAPwo1JyOqyC9ccRZ9ysjhYdWQS1ELSjUHjEuxxRoEgwKfrF7kxbo89dixQ7oF9E9CgeWtftJfMtDxGtMhmtaIurHjjcfOPWR8TND0b1Lp1pLkzPn6GdI2aRWqV3tNsljKoXP9omDInhP9xrzoLiXISbekfnLrfFQW+rmylCBiu6ZqKv0weg1V6b7B6rAyV3nIcXInLuKXSlQx0nnPOdAgMBAAECggEAOrAlKSqyYIeL5XpZ+zzwCly9X/2LThtpGcpyJ+esgMrTa+CVJjcKMcBNnVjQrL93zuDEBBDQHm05gO7F3JvIMFviyxYgehTnROvaXQH+OMW1b4AcPYcR55Foxl6UNaxdVHqdgZpT6hI0eDaPYI02tnzXKG/kDq1laTuMvErJQQp6Cd611yyAhBvpX1ibpAYvex10sfTkj0GRKmOrGqwVXibN29szaRei7Xeg/RStdVBgrYJoR5/4++dkGapa27oRdOh4VJUChRfXuJtH6pyxC7uay1fMRcmo2u6NcWAT6qMOvxLcuesnNFrbSlPoZaxWNiZRX/SVqeieyRAA0WS7IQKBgQDoywh4DkdL+SPrkA/sB0rOQF3kJjlzWibk9OM17In1P+obQk37kSRYKfBvsk48VWdG1fN33Up05Pxe+f36F//AZ8mp7uTmBtd6CAoR/005WxwkCSihF6LaDiB3VtxlpcfRA/TUZ10PMud43w0AeG30AG0KpCokfIiY87OpyTjJWQKBgQDlCgsgZ9rL3Wm7FbEDZ4f2uTB5rlT0Vz80paV0OOJdUQECrZW1PjemQpqIJocr8yoNupkrZKPSi4mbNoMFF1wXIydOjLq6iQ6KWIKRdsvmeXL++tWg6TiD8nDpBxuKzjRhwMcQN2lakb/SusoXnmG8qq12PCFUvpbhoZRqRPWv5QKBgQC8jUasxxPka0U21RawXC+w4t2pn3RFBC4goGEwGgibxkr+DTRQoHzJlB6Uud04bQwbicuLuIdIKvhmjSGzYaDa3LWwmDh6P+xjgQN3FEweOreOUITCBfz3lR2iy430HtS7bPLu31G2r8pgUnmbee/FBFtNlS41I1EYYbuRt9Pw8QKBgD6aPSpRWKtqTHD3X9e3X6FfQtGvhcb3Ze5E7HFU7wJklqsduRK9+8X05HocVcv8fd0cyKrkqiZtP2JuRueIWAJ2+FJvAsbjmVbVFHMgDmFjhrwM4YFG3cyq4pO+/pc0/3pMj9xt2N0Jg23c4koMX1iLKjhr/QxFv8XSPVfCm4jFAoGALfejdx4PpFgTWpbm5ZWRxukhZRhmfCIAWifYeJbsGTB5y7bheVxKmTpP9mKEqGL+gh3cLVPcZ557HWpc4d6NetdyrHffEhWULh4NWYDKC5BRCr9HjLKydBUQUMCFeJs3XZQTtN+CZORcuaI2ISH2QvfYki9ns4ujeH8OjzfHpvI=
# Public certificate to verify the signature of the SAML response
certificate: MIIDEzCCAfugAwIBAgIJAKoK/heBjcOYMA0GCSqGSIb3DQEBBQUAMCAxHjAcBgNVBAoMFU9yZ2FuaXphdGlvbiwgQ049T0lEQzAeFw0xNTExMTExMDEyMTVaFw0yNTExMTAxMDEyMTVaMCAxHjAcBgNVBAoMFU9yZ2FuaXphdGlvbiwgQ049T0lEQzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANBGwJ/qpTQNiSgUglSE2UzEkUow+wS8r67etxoEhlzJZfgK/k5TfG1wICDqapHAxEVgUM10aBHRctNocA5wmlHtxdidhzRZroqHwpKy2BmsKX5Z2oK25RLpsyusB1KroemgA/CjUnI6rIL1xxFn3KyOFh1ZBLUQtKNQeMS7HFGgSDAp+sXuTFujz12LFDugX0T0KB5a1+0l8y0PEa0yGa1oi6seONx849ZHxM0PRvUunWkuTM+foZ0jZpFapXe02yWMqhc/2iYMieE/3GvOguJchJt6R+cut8VBb6ubKUIGK7pmoq/TB6DVXpvsHqsDJXechxcicu4pdKVDHSec850CAwEAAaNQME4wHQYDVR0OBBYEFK7RqjoodSYVXGTVEdLf3kJflP/sMB8GA1UdIwQYMBaAFK7RqjoodSYVXGTVEdLf3kJflP/sMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADNZkxlFXh4F45muCbnQd+WmaXlGvb9tkUyAIxVL8AIu8J18F420vpnGpoUAE+Hy3evBmp2nkrFAgmr055fAjpHeZFgDZBAPCwYd3TNMDeSyMta3Ka+oS7GRFDePkMEm+kH4/rITNKUF1sOvWBTSowk9TudEDyFqgGntcdu/l/zRxvx33y3LMG5USD0x4X4IKjRrRN1BbcKgi8dq10C3jdqNancTuPoqT3WWzRvVtB/q34B7F74/6JzgEoOCEHufBMp4ZFu54P0yEGtWfTwTzuoZobrChVVBt4w/XZagrRtUCDNwRpHNbpjxYudbqLqpi1MQpV9oht/BpTHVJG2i0ro=
# Passphrase of the keystore
passphrase: secret
# Resource URL for the idp metadata
idp_metadata_url: classpath:metadata/mujina.local.idp.metadata.xml
# SingleSignOnServiceLocation
single_sign_on_service_location: http://localhost:8080/SingleSignOnService
# ACS location
acs_location_path: /saml/SSO
# Protocol binding
protocol_binding: urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST
# Do we sign the authnRequest
needs_signing: true
# Are endpoints compared. If so then pay notice to the base_url when behind a load balancer
compare_endpoints: true
[此數(shù)據(jù)只是虛構數(shù)據(jù)]
Metadata.xml文件中數(shù)據(jù)配置
<?xml version="1.0" encoding="UTF-8"?>
entityID="http://mock-idp" cacheDuration="P1Y"> aXphdGlvbiwgQ049T0lEQzAeFw0xNTExMTExMDEyMTVaFw0yNTExMTAxMDEyMTVaMCAxHjAcBgNV BAoMFU9yZ2FuaXphdGlvbiwgQ049T0lEQzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB ANBGwJ/qpTQNiSgUglSE2UzEkUow+wS8r67etxoEhlzJZfgK/k5TfG1wICDqapHAxEVgUM10aBHR ctNocA5wmlHtxdidhzRZroqHwpKy2BmsKX5Z2oK25RLpsyusB1KroemgA/CjUnI6rIL1xxFn3KyO Fh1ZBLUQtKNQeMS7HFGgSDAp+sXuTFujz12LFDugX0T0KB5a1+0l8y0PEa0yGa1oi6seONx849ZH xM0PRvUunWkuTM+foZ0jZpFapXe02yWMqhc/2iYMieE/3GvOguJchJt6R+cut8VBb6ubKUIGK7pm oq/TB6DVXpvsHqsDJXechxcicu4pdKVDHSec850CAwEAAaNQME4wHQYDVR0OBBYEFK7RqjoodSYV XGTVEdLf3kJflP/sMB8GA1UdIwQYMBaAFK7RqjoodSYVXGTVEdLf3kJflP/sMAwGA1UdEwQFMAMB Af8wDQYJKoZIhvcNAQEFBQADggEBADNZkxlFXh4F45muCbnQd+WmaXlGvb9tkUyAIxVL8AIu8J18 F420vpnGpoUAE+Hy3evBmp2nkrFAgmr055fAjpHeZFgDZBAPCwYd3TNMDeSyMta3Ka+oS7GRFDeP kMEm+kH4/rITNKUF1sOvWBTSowk9TudEDyFqgGntcdu/l/zRxvx33y3LMG5USD0x4X4IKjRrRN1B bcKgi8dq10C3jdqNancTuPoqT3WWzRvVtB/q34B7F74/6JzgEoOCEHufBMp4ZFu54P0yEGtWfTwT zuoZobrChVVBt4w/XZagrRtUCDNwRpHNbpjxYudbqLqpi1MQpV9oht/BpTHVJG2i0ro=
Location="http://localhost:8080/SingleSignOnService"/>
在初始化時整合這些配置數(shù)據(jù),重定向發(fā)送到single_sign_on_service_location配置的地址中,由用戶輸入認證憑證,并提交。
完成憑證驗證之后,攜帶需要響應的數(shù)據(jù)返回給前端。
前端通過調用后勤系統(tǒng)sso接口地址,將密鑰/公鑰及token傳入后端,然后由后端對IDP系統(tǒng)進行驗證。
通過后由后端跳轉到系統(tǒng)頁面當中完成認證操作。
5 結語
隨著數(shù)字化和云計算進程的深入,企業(yè)信息安全的維度和邊界越來越立體,越來越復雜。保障企業(yè)信息安全服務的時間,已經由原來的8小時,轉變?yōu)楝F(xiàn)在的7*24小時,全年365天不間斷提供服務。同時,也不再有物理地點的限制,數(shù)據(jù)泄露會對企業(yè)造成巨大的損失,身份認證是訪問系統(tǒng)資源的入口,對于保障企業(yè)信息資源的安全極其重要。集團公司提供的統(tǒng)一的ADFS身份認證服務,通過多因素身份認證、弱密碼監(jiān)測、密碼錯誤次數(shù)超限賬號鎖定策略、大數(shù)據(jù)分析等安全技術,可以提供非常安全地對信息資源的保護,同時還可以促進企業(yè)各信息系統(tǒng)數(shù)據(jù)共享,提升企業(yè)效率。渤海油田后勤系統(tǒng)與集團公司的基于SAML 2.0協(xié)議的、啟用雙因素認證的ADFS聯(lián)合身份認證服務的集成,實現(xiàn)了后勤系統(tǒng)用戶需要登錄集團公司統(tǒng)一的ADFS單點登錄頁面進行AD身份認證。只有通過了短信或郵件接收的登錄驗證碼和AD密碼的雙重認證后,才能訪問后勤系統(tǒng)資源,極大提高了后勤支持管理系統(tǒng)身份認證的安全性,降低了后勤信息數(shù)據(jù)泄露的風險。同時,后勤系統(tǒng)也不再需要管理用戶密碼,減輕了系統(tǒng)工作量;后勤系統(tǒng)的用戶也不再需要記憶和維護不同的用戶賬號和密碼,提高了工作效率。渤海油田生產作業(yè)的正常運行與優(yōu)質的后勤作業(yè)管理密不可分,后勤資源管理系統(tǒng)正是為了高效支持渤海油田后勤業(yè)務的運營而建設的,ADFS身份認證在后勤資源管理系統(tǒng)中的應用,為后勤系統(tǒng)提供了強有力的保障,具有極大的推廣價值。
參考文獻
[1] 灰信網.基于SAML的ADFS認證集成方案[EB/OL].https://www.freesion.com/article/8033848552,2021-8-20.