首页 > 其他分享 >.NET Framework 旧系统新增SSO单点登录实例

.NET Framework 旧系统新增SSO单点登录实例

时间:2024-06-11 17:56:16浏览次数:17  
标签:string 登录 Framework SSO redirectUrl login NET aspx Response

最近公司的很多项目都要改单点登录了,不过大部分都还没敲定,目前立刻要做的就只有一个比较老的项目

先改一个试试手,主要目标就是最短最快实现功能

首先因为要保留原登录方式,所以页面上的改动就是在原来登录页面下加一个SSO登录入口

用超链接写的入口,页面改造后如下图:

其中超链接的 href="StaffLogin.aspx"  

新建Web窗体StaffLogin.aspx(名字可以随便起,只要能对应的上,不必非要叫StaffLogin),

前台不用管,直接写对应的后台StaffLogin.aspx.cs

注意添加引用:using Saml;

 具体代码如下:


protected void Page_Load(object sender, EventArgs e)
{
            if (!IsPostBack)
            {
                var samlEndpoint = "https://login.microsoftonline.com/fd799da1-bfc1-4234-a91c-72b3a1cb9e26/saml2";
                var request = new AuthRequest(
                    "aaaprd", //TODO: put your app's "entity ID" here
                    "https://xxxx此处替换为网址xxxx.com/Auth" //TODO: put Assertion Consumer URL (where the provider should redirect users after authenticating)
                );
                //now send the user to the SAML provider
                string redirturl = request.GetRedirectUrl(samlEndpoint);
                Response.Write("<script language='javascript'>parent.location.href='" + redirturl + "';</script>");
            }

}

request里面两个参数,第一个是entityID(是系统的唯一标识)  第二个是单点登录验证通过后回调的url

新建Web窗体Auth.aspx(名字可以随便起,只要能对应的上,不必非要叫Auth,这里叫这个名字是因为跟对接的人约定的回调URL是这个),

前台不用管,直接写对应的后台Auth.aspx.cs

具体代码如下:

 protected void Page_Load(object sender, EventArgs e)
 {
            if (!IsPostBack)
            {
                try
                {if (Request.Form.HasKeys() && null != Request.Form["SAMLResponse"])
                    {
                        string samlCertificate = @"-----BEGIN CERTIFICATE-----
                        此处为证书编码
                        -----END CERTIFICATE-----";
var samlResponse = new Response(samlCertificate, Request.Form["SAMLResponse"]);
if (samlResponse.IsValid()) { var mail = samlResponse.GetNameID(); //let's get the username DFS_S_UserInfo modelUser = new DFS_S_UserInfoBll().GetModelByMail(mail); if (modelUser == null) {string redirectUrl = string.Format("~/login.aspx?errorMessage={0}", HttpUtility.UrlEncode("系统内用户不存在")); Response.Redirect(redirectUrl); } else { LoginInfo.SetInfo(modelUser.UserID); if (LoginInfo.GetCurrentLoginInfo() != null) {if (LoginInfo.GetCurrentLoginInfo().UserID > 0) { Response.Redirect("~/home.aspx", false); // 注意:endResponse设置为false Context.ApplicationInstance.CompleteRequest(); // 手动结束请求 } } else {string redirectUrl = string.Format("~/login.aspx?errorMessage={0}", HttpUtility.UrlEncode("人员登录验证失败")); Response.Redirect(redirectUrl); } } } else {string redirectUrl = string.Format("~/login.aspx?errorMessage={0}", HttpUtility.UrlEncode("人员登录验证失败")); Response.Redirect(redirectUrl); } } else {string redirectUrl = string.Format("~/login.aspx?errorMessage={0}", HttpUtility.UrlEncode("人员登录验证失败")); Response.Redirect(redirectUrl); } } catch(Exception ex) { string redirectUrl = string.Format("~/login.aspx?errorMessage={0}", HttpUtility.UrlEncode("系统错误,请联系IT")); Response.Redirect(redirectUrl); } } }

上述代码里证书samlCertificate是客户方提供的,entityID也是在拿到证书前先提供过去的

实际开发中,肯定要有的,这个不用担心,拿到证书替换进去既可,具体代码结构跟我这个应该差不多

samlResponse.IsValid()验证过就说明单点登录已经完成 

里面的部分就是承接原系统的正常登录逻辑,仅供参考,具体按照系统的登录调整

 

标签:string,登录,Framework,SSO,redirectUrl,login,NET,aspx,Response
From: https://www.cnblogs.com/fkcxy/p/18242504

相关文章

  • 基于.Net 框架实现WebSocket 简单通信——服务端
    新建项目创建一个.Net框架的控制台程序。添加包 项目→管理NuGet程序包打开包管理窗口,添加SuperWebSocket程序包。实现项目→添加类打开添加新项窗口,添加一个C#类。启动监听 WebSocketServersocket=newWebSocketServer();Console.WriteLine("IP:"+ip......
  • 云原生周刊:Kubernetes 十周年 | 2024.6.11
    开源项目推荐KubernetesGoatKubernetesGoat是一个故意设计成有漏洞的Kubernetes集群环境,旨在通过交互式实践场地来学习并练习Kubernetes安全性。kube-state-metrics(KSM)kube-state-metrics是一个用于收集Kubernetes集群状态信息的开源项目,它能够提供各种有用的指......
  • NET8中增加的简单适用的DI扩展库Microsoft.Extensions.DependencyInjection.AutoActiv
    这个库提供了在启动期间实例化已注册的单例,而不是在首次使用它时实例化。单例通常在首次使用时创建,这可能会导致响应传入请求的延迟高于平时。在注册时创建实例有助于防止第一次Request请求的SLA以往我们要在注册的时候启动单例可能会这样写://注册:services.AddSingleton<Fil......
  • yolov5-7.0更改resnet主干网络
    参考链接ClearML教程:https://blog.csdn.net/qq_40243750/article/details/126445671b站教学视频:https://www.bilibili.com/video/BV1Mx4y1A7jy/spm_id_from=333.788&vd_source=b52b79abfe565901e6969da2a1191407开始github地址:https://github.com/z1069614715/objec......
  • unity游戏开发之网络篇netcode
    在多人游戏过程中需要复杂的状态同步机制来支撑多个玩家的状态同步,其中包括位置信息、场景信息、动画信息等等,unity提供了netcode插件来轻松完成这些复杂的网络功能,上手也是非常简单的。下面是该插件使用的基本步骤和注意事项:1.安装网络组件netcode2.配置netcode环境(必备)......
  • 【工作必备知识】Linux系统网络诊断与netstat命令
    【工作必备知识】Linux系统网络诊断与netstat命令大家好,我叫秋意零。今天分享一篇Linux系统中与网络相关的干货(包含相关面试题),有可能对你理解网络有一定帮助。同时工作中网络诊断也时常使用,对排查问题有帮助,绝对干货。如果有帮助记得点赞三连呀。netstat命令netstat......
  • ASP .Net Core Web Api - 简介
    1.项目介绍ASP.NETCore支持两种创建API的方法:基于控制器的方法和最小API。API项目中的控制器是派生自ControllerBase的类。最小API在Lambda或方法中使用逻辑处理程序定义终结点。这里的最小API用的相对较少,所以我们使用基于控制器的方法。WebAPI中的控制器是......
  • C#、.Net通过HttpWebRequest请求WebService接口
    点击查看代码///<summary>///测试按钮中调用WebService接口///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidbutton1_Click(objectsender,EventArgse){//strin......
  • [ToneTuneToolkit][023]UGUI的去色,使UI元素变为灰色
    #regionEnvironmentWindows1022H2Unity2022.3.30f1LTSVSCode1.90.0//ToneTuneToolkit下载地址// https://github.com/MirzkisD1Ex0/ToneTuneToolkit.git#endregion 把UGUI的元素去色!变成灰色!!!超级方便!//该项功能已包含至ToneTuneToolkit插件  01.新建场景,新建......
  • 解决方案 | vbnet的msgbox 窗口最前置,topmost属性设置
    ForthatyoucanusetheTopMostPropertyofMsgBox(Number262144)MsgBox("Hellothere",262144,Title:="Outoffocus")Edit: AnotherwaytoaccomplishthisiscreatingatemporaryformUsingform=NewForm()With{.TopMost=True}......