单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理。
简而言之,它的解释是:在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。
相信说到这里,很多小伙伴会直呼在开发中曾经遇到过这样的麻烦,这里博主记录一下自己的解决方法。
第一步:获取域名,包括一个一级域名、多个二级域名(这里的一级域名主要是主系统使用),二级域名就是各个子系统使用,在主系统登陆过后,不需要登陆即可跳转到各个子系统。
第二步:添加相应用户,即该用户可以同时访问主系统和各个子系统
第三步:生成相应密钥信息,主要用作各系统之间解析登陆信息数据时使用。密钥生成入口
第四步:在webconfig中配置
<system.web>
<!--司管车服接口发布-->
<authentication mode="Forms">
<forms loginUrl="一级域名登陆地址" timeout="2880" domain="xxxx.cn" name="Name"/>
</authentication>
<machineKey validationKey="XXXX"
decryptionKey="XXXX" validation="SHA1" decryption="AES"/>
<httpRuntime targetFramework="4.5"/>
<compilation debug="true" targetFramework="4.7"/>
<pages>
<namespaces>
<add namespace="System.Web.Helpers"/>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Routing"/>
<add namespace="System.Web.WebPages"/>
</namespaces>
</pages>
</system.web>
第五步:在一级域名登陆时FormsAuthentication.SetAuthCookie(sysUserModel.user_guid + “|” + sysUserModel.usr_name + “|” + sysUserModel.Name, false); 插入相应缓存
第六步:Global全局文件中配置,获取登陆时的信息,并添加过滤器
//UserContext userContext = new UserContext
//{
// User = new UserInfo
// {
// UserName = loginIds.Split('|')[1].ToString(),
// UserId = loginId,
// UserCode = loginIds.Split('|')[2].ToString()
// }
//};
//this.Context.Items["UserContext"] = userContext;
这样下来,一个简单的SSO登陆就成功啦~
还不错