.net 下SSO 单点登录的说明

前言:  单点登录,即用户在站点A 登录以后,无需登录 站点 B、站点 C、站点 D 以此类推,往往这些网站都有一个共同的验证中心,下面介绍单点的几种方式

参考:前后端分离单点登录SSO实现方案 淘宝、京东跨域获取Cookie、OAuth2、QQ客户端多种模式_Exrick的博客-CSDN博客

前后端分离下单点登录实现的几种方式


1. 共享Cookie模式 

    ①: 即 多个站点公用一个根域名,例如验证中心的地址是 www.Test.com, 那么 实现单点登录的站点必须为子域名,即  aaa.Test.com,bbb.Test.com,ccc.Test 等。

    ②:用户登录以后将 ticket 存储在根域名和子域名的 Cookie 中,这样其他的子域名也能共享到这个 Cookie,如此以来即可实现单点登录


2.  OAuth2.0模式

①: 站点 A 发现用户未登录, 跳转到登录验证中心,登录成功后,验证中心会带着 ticket 跳转到 站点 A,同时将此 ticket 作为key, ticket 对应的身份 作为value 存入数据库(Redis) 

② :验证中心将 ticket 写入cookie(此时写入的cookie 位于验证中心) 

③ : 站点 B 发现用户未登录,跳转到登录验证中心,

④: 验证中心发现有 cookie 缓存(即验证中心这个站点自身的 cookie),则判断 cookie 中的 ticket 的有效性,判断成功以后,带着此 ticket 跳转到 站点 B 的页面

⑤: 任意一个站点用户注销登录后,都要调用 验证中心 的作废 ticket 的接口

(ticket  可以用Guid 或者其他的加密方式得到的唯一值)


3.  跨域设置Cookie模式

这个就比较的简单粗暴了,

①:  集群下的 任何一个站点都要提供一个 设置 cookie 的接口

② : 集群下的任何一个站点登录以后,都要调用其他站点的 设置刷新 cookie 的接口,以保持用户信息同步


以上方式获取到的 凭据,往往最后在站点 B,站点 C 等具体的系统中还需要去调用验证中心的接口,获取用户的更详细的信息(类似以集群下的站点都会获得一个身份证号,想要获取 姓名、户籍、名族这些详细的信息,还要去调用具体的接口才能实现)

注意:  所有的SSO都是基于浏览器来的,不可能在Edge浏览器登录了 ,在 Chrome 浏览器不用登录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET Core 6中实现单点登录SSO)需要进行以下步骤: 1. 配置身份提供者中的客户端信息,包括客户端ID、客户端密钥、回调URL等信息。 2. 在应用中配置身份认证和单点登录,可以使用OpenID Connect或SAML等协议来实现。 3. 在需要使用单点登录的Action方法中使用[Authorize]特性进行身份认证。 4. 可以使用ASP.NET Core Identity和IdentityServer4等框架来实现单点注销。 下面是一个使用IdentityServer4实现单点登录的示例: 1. 安装IdentityServer4包 ```shell dotnet add package IdentityServer4 ``` 2. 配置IdentityServer4 ```csharp public void ConfigureServices(IServiceCollection services) { services.AddIdentityServer() .AddInMemoryClients(new List<Client> { new Client { ClientId = "client1", ClientSecrets = { new Secret("secret".Sha256()) }, AllowedGrantTypes = GrantTypes.ClientCredentials, AllowedScopes = { "api1" } } }) .AddInMemoryApiResources(new List<ApiResource> { new ApiResource("api1", "My API") }) .AddDeveloperSigningCredential(); } public void Configure(IApplicationBuilder app) { app.UseIdentityServer(); } ``` 3. 配置API ```csharp [Route("api/[controller]")] [ApiController] public class IdentityController : ControllerBase { [HttpGet] [Authorize] public IActionResult Get() { return Ok(new { message = "Hello, World!" }); } } ``` 4. 配置客户端 ```csharp public void ConfigureServices(IServiceCollection services) { services.AddAuthentication("Bearer") .AddJwtBearer("Bearer", options => { options.Authority = "https://localhost:5001"; options.Audience = "api1"; }); services.AddControllers(); } public void Configure(IApplicationBuilder app) { app.UseAuthentication(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值