今天就跟大家聊聊有关如何理解基于的OIDC实现单点登录的原理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
网站建设哪家好,找成都创新互联公司!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了平度免费建站欢迎大家使用!
不知大家有没有体会,好像看了很多id4(IdentityServer4,下同)的文章,对:
// sso implicit client
new Client
{
ClientId = "ssoimplicit", //这个client id 跟 MfcImplicit 里面的配置要一致
ClientName = "sso implicit clinet",
AllowedGrantTypes = GrantTypes.Implicit,
RedirectUris = { "http://sso.client.net/signin-oidc"> PostLogoutRedirectUris = { "http://sso.client.net/signout-callback-oidc" },
AllowedScopes = new List
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
IdentityServerConstants.StandardScopes.Email
}
}
ok,我们用下抓包工具观察下登录流程。
sso.client.net是客户端,而登录页在sso.client.net服务端
我们先打开需要登录才可以访问的:http://sso.client.net/Home/Secure
这里302到了授权端点 http://odic.server.net/connect/authorize
这就是步骤1中, 302挑战的授权端点携带的参数。
点击登录,跳转到是否授权页面,这个页面不一定展示,可通过配置Client的RequireConsent=false,跳过这个页面。
可以清楚的看到去到了:
http://odic.server.net/connect/authorize/callback
callback,哦,这是一个登录回调,它干了啥呢,我们仔细看响应:
我们看到id_token带有登录用户的信息:
iss:token发放的服务器地址
aud:clientid
sid:会话信息
kid:当前token的标识符
name:用户名
此外还有比如id_token的发放时间,过期时间,nonce,用户非机密信息等等。还有蓝色部分需要使用客户端公钥验证的签名等等。
这个时候客户端已经拿到登录用户的信息了,这时客户端直接使用登录用户信息,构建当前应用sso.client.net的登录状态即可。
比如下面的这个 Set名为Implicit的Cookie:
单点登出我就不细说了,使用:
//指定登录方案的方式登出
await HttpContext.SignOutAsync(IdentityServerConstants.DefaultCookieAuthenticationScheme);
//或者直接
await HttpContext.SignOutAsync();
暴力点删除cookie也可以,不过那只能算是半退出状态吧。
通过对以上一个使用Id4构建的OIDC实现的登录流程来看,OIDC的SSO它完全无光域名的,id4登录成功后,客户端通过使用id_token来构建自身的登录状态,一个client如此,N个皆然。
大家好像感觉这个SSO的实现方式跟前面的CAS流程很像诶,我们再看一遍前面CAS的图,好像是发现了啥不得了的东西。
没错:openid也是基于CAS流程的一个实现(我根据理解猜的 没有证据)。
再多说两句
id4确实是好东西,暂时用不上也要多了解、学习,最好写个博客做个笔记加深下理解。
在理解的基础上不要去背各种Flow有啥区别什么的,知道什么场景下用那种流程就行,也没几个。
看完上述内容,你们对如何理解基于的OIDC实现单点登录的原理有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。