SSO在旧的ASP.NET Web窗体网站中

时间:2018-02-14 18:38:49

标签: webforms forms-authentication identityserver4

上下文:

我正在为之工作的公司希望与使用授权代码授权的第三方实现单点登录功能。我们的产品现在使用ASP.NET Web窗体应用程序中的表单身份验证在.NET Framework 4.0中构建。

问题:

有没有办法实现单点登录,用户不必登录两次(一次通过表单身份验证,另一次通过身份服务器)? 详细说明,在用户通过表单身份验证成功登录后,有没有办法让身份服务器自动验证用户?

2 个答案:

答案 0 :(得分:1)

这是IdSvr3 webforms客户端:https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/Clients/WebFormsClient

从我读过的内容来看,IdentityServer3客户端(以前是.NET核心版)应该与IdentityServer4(必须在.NET核心上运行)一起使用,并且会成功与IdentityServer4通信。

答案 1 :(得分:1)

所以我设法通过ajax将登录时的用户凭据发送到身份服务器来解决我的问题。我创建了一个webapi控制器,用于对用户进行身份验证,并为idsrv auth cookie发回'set-cookie'响应头。

所以现在我已登录原始应用程序以及身份服务器,无需用户手动登录两次。 你只需要处理一堆Cross-Origin-Requests的东西。在为应用程序设置CORS策略以设置ajax请求时,必须设置“AllowCredentials”,以便“set-cookie”标头实际应用。

$.ajax({
    method: 'GET',
    url: 'https://localhost:44304/api/login?username=testing&password=testing',
    crossDomain: true,
    xhrFields: {
        withCredentials: true
    }
})

api / login端点在Controller中定义,只调用HttpContext.SignInAsync()扩展方法。