当前位置: 首页 > article >正文

统一门户单点登入(C#-OOS机制)

1.非自研系统

通过接口,获取第三方系统token,存redis缓存,设计跳转配置,根据获取的配置路由等用户信息来访问第三方系统免登录。(登入校验在第三方系统实现)
/// <summary>
/// 获取OA登录Token
/// </summary>
/// <returns></returns>
public async Task<string> PostOaAcessTokenAsync(string loginid)
{
	string resToken = "";

	var formData = new Dictionary<string, string>
	{
		{ "appid", "*************************" },
		{ "loginid", loginid }
	};

	var content = new FormUrlEncodedContent(formData);

	// 发送POST请求
	HttpResponseMessage response = await HttpHelper.Client.PostAsync("http://127.0.0.1:8888/ssologin/getToken", content);

	// 处理响应
	if (response.IsSuccessStatusCode)
	{
		// 对成功的响应进行操作
		var responseContent = await response.Content.ReadAsStringAsync();
		resToken = responseContent;

		if (resToken.Contains("has no account:"))
		{
			throw new UserFriendlyException(UserConst.OA_User_No_Exist);
		}

		return resToken;// 域登陆成功
	}
	else
	{
		// 处理错误
		throw new UserFriendlyException(UserConst.Login_Error);
	}

}

1.自研系统(OOS机制-单点登录)

通过调整自研系统登入接口参数,添加token字段,由门户创建token,这边按照token值来判断是否不走正常账号密码登入,直接通过token值调用门户接口校验,如果校验成功则质检进入自研系统。
public async Task SSOLoginValidationAsync(string token, Action<UserEntity> userAction = null)
{
    var user = new UserEntity();
    // 发送POST请求
    HttpResponseMessage response = await HttpHelper.Client.PostAsync("http://127.0.0.1/prod-api/auth/get-token/" + token, null);
    // 处理响应
    if (response.IsSuccessStatusCode)
    {
        // 对成功的响应进行操作
        var responseContent = await response.Content.ReadAsStringAsync();
        var jObject = JObject.Parse(responseContent);
        var bo = jObject["succeeded"].Value<bool>();
        if (bo)
        {
            string UserCode = jObject["data"].Value<string>();// 工号
            if (await ExistAsync(UserCode, o => user = o))
            {
                if (userAction is not null)
                {
                    userAction.Invoke(user);
                    return;// 域登陆成功
                }
            }
            throw new UserFriendlyException(UserConst.Login_User_No_Exist);
        }
        else
        {
            // 处理域登陆失败
            throw new UserFriendlyException(UserConst.Auth_User_Token_Invalid);
        }
    }
    else
    {
        // 处理错误
        throw new UserFriendlyException(UserConst.SSO_Token_Err);
    }
}

http://www.kler.cn/a/487746.html

相关文章:

  • 【CSS】设置滚动条样式
  • H5通过URL Scheme唤醒手机地图APP
  • maven的简单介绍
  • 新车月交付突破2万辆!小鹏汽车“激活”智驾之困待解
  • NRC优先级中比较特殊的—NRC0x13和NRC0x31
  • 机器学习基础-机器学习的常用学习方法
  • 物联网:七天构建一个闭环的物联网DEMO-MQTT的配置
  • MySQL核心揭秘:InnoDB存储引擎高级特性
  • 从MySQL5.7平滑升级到MySQL8.0的最佳实践分享
  • webrtc之rtc::ArrayView<const uint8_t>
  • QtCreator快捷键失效的解决办法
  • 大语言模型兵马未动,数据准备粮草先行
  • 03.01、三合一
  • C#实现凸壳算法
  • krpano 实现文字热点中的三角形和竖杆
  • LabVIEW数据库管理系统
  • php 使用simplexml_load_string转换xml数据格式失败
  • NineData云原生智能数据管理平台新功能发布|2024年12月版
  • 基于vue框架的的校园生活服务平台8vwac(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • QT 端口扫描附加功能实现 端口扫描5
  • 新活动平台建设历程与架构演进
  • C#,图论与图算法,任意一对节点之间最短距离的弗洛伊德·沃肖尔(Floyd Warshall)算法与源程序
  • 【Redis源码】 RedisObject结构体
  • 基于Springboot科研工作量管理系统【附源码】
  • MySQL innodb中一条sql的执行流程
  • 时序数据库InfluxDB—介绍与性能测试