SSO单点登录目的
之前一般来讲系统简单,登录后 本地 cookie 加服务器 session 存储用户身份信息,以此为依据来判断用户再次登录时免验证
但随着互联网发展,很多应用 部署在不同的服务器上,而用户体系是一套,那么按照原来的方式,每个应用的服务器都需要 登录然后存session信息,这样就导致了重复操作,而sso就是为了 在多个应用 多个服务器 还只想登录一次的效果 避免重复操作。
所以 目的很简单,在多服务器中 只通过一个认证登录的地方去处理
关键技术组件
令牌(Token):传递用户身份信息的载体(如 JWT、SAML Token)。
认证中心(Identity Provider, IdP):负责用户身份验证和令牌签发。
服务提供者(Service Provider, SP):依赖认证中心验证令牌的应用系统
Net 处理单点登录的方式配置认证中心 IdentityServer
-
基于 OAuth 2.0/OpenID Connect
协议特点:
OAuth 2.0:授权框架,用于第三方应用获取资源访问权限。
OpenID Connect (OIDC):基于 OAuth 2.0 的身份认证层,支持 SSO。
适用场景:互联网应用、跨平台服务(如第三方登录)。 -
场景说明
假设企业使用 独立身份提供者(IdP)(如 IdentityServer、Azure AD 或 Okta)管理用户身份,多个应用(Service Providers, SP)通过该 IdP 实现 SSO。例如:
应用A:https://app1.company.com(内部 HR 系统)
应用B:https://app2.company.com(项目管理平台)
用户登录任意应用后,可无缝访问其他应用,无需重复认证
注!!登录信息的输入凭证都是在IDP输入不在应用A和应用B输入 -
实现步骤(以 OIDC + ASP.NET Core 为例)
配置 Identity Provider(以 IdentityServer 为例)
步骤:- 部署 IdentityServer(开源 IdP)。
- 注册客户端(应用A和应用B)并配置重定向 URI。
- 定义用户身份信息(Claims)和 API 资源(Scopes)
// IdentityServer 的 Config.cs
public static class Clients
{
public static IEnumerable<Client> GetClients()
{
return new List<Client>
{
new Client
{
ClientId = "app1",
ClientSecrets = {
new Secret("app1-secret".Sha256()) },
AllowedGrantTypes = GrantTypes.Code,
RedirectUris = {
"https://app1.company.com/signin-oidc" },
AllowedScopes = {
"openid", "profile", "email" }
},
new Client
{
ClientId = "app2",
ClientSecrets = {
new Secret("app2-secret".Sha256()) },
AllowedGrantTypes = GrantTypes.Code,
RedirectUris = {
"https://app2.company.com/signin-oidc" },
AllowedScopes = {
"openid", "profile", "email" }
}
};
}
}
ASP.NET Core 代码配置:
在 Startup.cs 中添加 OIDC 认证中间件
// ASP.NET Core 中配置 OIDC 认证
// 完整 OIDC 配置示例(Startup.cs)
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies"

最低0.47元/天 解锁文章
541

被折叠的 条评论
为什么被折叠?



