如何解决跨域SSO认证问题-主从域名网站单点登录配置流程详解

教程大全 2026-01-27 10:44:32 浏览

配置主从域名网站单点登录

基本概念与准备

主从域名(Primary Domain & Secondary Domain)是指同一应用下,主域名作为核心认证中心(如),从域名(如 sub.main.com )作为业务子域,单点登录(SSO)的核心目标是让用户只需一次登录,即可访问所有关联域名下的资源,提升用户体验与安全性。

核心流程

用户访问从域名网站时,系统会重定向至主域名的SSO认证中心完成身份验证;认证成功后,认证中心返回授权令牌(如JWT),从域名通过该令牌验证用户身份,无需重复登录。

准备工作

主域名(认证中心)配置步骤

主域名作为SSO认证中心,需部署并配置认证服务器(以Keycloak为例),实现用户身份验证与令牌生成。

安装与初始化Keycloak

# 下载Keycloakwget-xzf keycloak-21.1.3.tar.gzcd keycloak-21.1.3# 启动服务器./bin/start-keycloak.sh

访问 ,进入初始化界面,设置管理员密码、数据库连接(默认使用H2内存数据库,需切换为MySQL/PostgreSQL)。

创建用户存储与用户组

配置SSO客户端(从域名)

配置安全规则

从域名(客户端)配置步骤

从域名作为业务应用,需集成Keycloak的OAuth2客户端,实现用户认证与令牌验证。

Nginx反向代理配置

在从域名Nginx配置文件中添加SSL与反向代理:

server {listen 443 ssl http2;server_name sub.main.com;ssl_certificate /etc/ssl/certs/sub.crt;ssl_certificate_key /etc/ssl/private/sub.key;location / {proxy_pass# 假设后端服务运行在3000端口proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}location /callback {proxy_passHost main.com;proxy_set_header X-Forwarded-Proto $scheme;}}

(需生成 sub.main.com 的SSL证书,并配置反向代理到后端服务)。

后端集成OAuth2客户端

以Node.js(express)为例,配置OAuth2客户端:

const express = require('express');const axios = require('axios');const session = require('express-session');const passport = require('passport');const OAuth2Strategy = require('passport-oauth2').Strategy;const app = express();app.use(session({ secret: 'secret-key', resave: false, saveUninitialized: false }));app.use(passport.initialize());app.use(passport.session());// 配置Keycloak OAuth2策略passport.use(new OAuth2Strategy({authorizationURL: 'http://main.com:8080/realms/main/protocol/openid-connect/auth',tokenURL: 'http://main.com:8080/realms/main/protocol/openid-connect/token',clientID: 'sub-client',clientSecret: 'your-client-secret',callbackURL: 'http://sub.main.com/callback'}, async (accessToken, refreshToken, profile, done) => {// 获取用户信息并存储会话done(null, { id: profile.sub, username: profile.name });}));passport.serializeUser((user, done) => done(null, user));passport.deserializeUser((user, done) => done(null, user));// 登录页面app.get('/', (req, res) => {res.send('登录');});// 登录回调app.get('/login', passport.authenticate('oauth2'));// 认证成功回调app.get('/callback', passport.authenticate('oauth2', {successRedirect: '/',failureRedirect: '/login'}));// 受保护资源app.get('/protected', (req, res) => {if (req.ISAuthenticated()) {res.send(`欢迎, ${req.user.username}!`);} else {res.send('请先登录');}});app.listen(3000, () => console.log('Server running on port 3000'));

(需替换 clientSecret 为Keycloak中SSO客户端的密钥,并确保回调URL与Keycloak配置一致)。

令牌验证

在受保护资源(如 /protected )中,通过验证用户身份(已由passport完成令牌验证),无需额外调用Keycloak。

关键技术点解析

SSO协议选择

安全性保障

验证与测试

常见问题与解答

Q1:配置后,从域名无法获取用户信息怎么办?

解答

跨域SSO认证问题解决

Q2:如何确保SSO的安全性?

解答

通过以上步骤,可实现主从域名间的单点登录,提升用户体验与系统安全性。


AAAA级是什么概念?

展开全部4A是指:认证Authentication、账号Account、授权Authorization、审计Audit,中文名称为统一安全管理平台解决方案。 即将身份认证、授权、审计和账号(即不可否认性及数据完整性)定义为网络安全的四大组成部分,从而确立了身份认证在整个网络安全系统中的地位与作用。 4A (认证Authentication、账号Account、授权Authorization、审计Audit)统一安全管理平台解决方案。 1995年,国际网安界最早提出4A(认证Authentication、账号Account、授权Authorization、审计Audit)统一安全管理平台解决方案概念,正式将身份认证作为整个网络安全的基础及不可或缺的组成部分,即将身份认证、授权、审计和账号(即不可否认性及数据完整性)定义为网络安全的四大组成部分,从而确立了身份认证在整个网络安全系统中的地位与作用。 所谓4A统一安全管理平台解决方案,即融合统一用户账号管理、统一认证管理、统一授权管理和统一安全审计四要素后的解决方案将涵盖单点登录(SSO)等安全功能,既能够为客户提供功能完善的、高安全级别的4A管理,也能够为用户提供符合萨班斯法案(SOX)要求的内控报表。

多个平台如何做单点登录?

即使是多个平台,单点登录系统可以让他们不必为每一个应用都开发用户系统,降低了工作量,统一的用户数据在后期管理和维护中也会更加方便。 玉符科技的单点登录技术可以,深耕单点登录SSO领域,可以满足客户遇到的如何实现单点登录?企业如何实现统一认证?的难题,通过玉符单点登录可以快速的帮助企业实现云认证,像SAML、OIDC、CAS、Ouath等主流协议全部支持,可以实现快速部署,交付周期短,适合各行业企业。

QQ2009无法完成验证,怎么解决?不要随便跟我说网上现存的答案,我已经试过了,没用

是缺失了、、 这几个文件,按下面的方法就行了。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐