单点登入这块怎么实现的2024-9-24

单点登录(SSO)通常以下步骤实现:

1.身份验证中心:建立一个身份验证中心(如OAuth2.0、OpenID Connect等),用于管理用户的认证和授权

2.用户登录:

用户在身份验证中心进行登录,输入凭证(如用户名和密码)

认证成功后,身份验证中心会生成一个令牌(Token)

3.令牌传递

用户访问其他应用时,应用会检查是否存在有效的令牌。

如果没有,用户会被重定向到身份验证中心进行验证

如果存在令牌,应用会向身份验证中心验证该令牌的有效性。

4.访问控制

一旦令牌被验证,用户将被允许访问请求的应用

应用可以根据令牌中的信息进行权限控制

5.注销

当用户在某个应用注销时,可以选择同时注销所有应用。

身份验证中心会处理注销请求,并使所有有效令牌失效。

技术实现

Spring Security:可以结合Spring Security和OAuth2来实现SSO

Redis:可以用来存储令牌,以便快速验证。

前端处理:在前端应用中,通常会使用JavaScript来处理令牌存储和发送。

Shiro

使用Apache Shiro实现单点登录(SSO)可以按照以下步骤进行:

1.配置Shiro:

在你的项目中添加Shiro依赖

创建shiro.ini或使用Java配置类来配置Realm,Session,Filter等

2.创建Realm:

自定义一个Realm来处理用户的身份验证和授权

在Realm中实现doGetAuthenticationInfo方法以验证用户凭证

3.集成Token

在身份验证中心登录时生成一个JWT或其他类型的Token,并返回给用户

将Token存储在客户端(如浏览器的localStorage)

4.Filter处理

创建一个自定义的Filter,用于拦截请求并检查Token

如果请求没有有效的Token,重定向用户到身份验证中心进行登录

5.跨应用共享Session

通过将Session存储在共享的Redis或数据库中,使得各个应用可以共享用户的登录状态。

6.注销处理

在注销时,使Token失效,清除Session

示例代码

public class CustomRealm extends AuthorizingRealm{
        @Override

        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException{

        String username = (String) token.getPrincipal();

        String password = (String) token.getCredentials();

        // 验证用户凭证,返回 AuthenticationInfo

        }

}

配置实例

[main]

# 配置 Realm

myRealm = com.example.CustomRealm

securityManager.realm = $myRealm

# 配置 Filter

jwt = com.example.JwtFilter

[urls]

/api/** = jwt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值