gpt4 book ai didi

c# - 向现有项目添加 WIF STS 服务

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:48 26 4
gpt4 key购买 nike

我们有几个按以下方式设置的网站:

Site1.Web - ASP.NET Web 项目(.NET 4.0、WebForms)Common.Core - 类库项目(所有数据库交互)

Web 项目在每个站点出现一次,而 Common.Core 项目在所有站点之间共享。我们在 Web 项目中有一个登录表单,为了进行身份验证,调用类库。它会取消类似于下面的代码:

Common.Core.Authenticate auth = new Common.Core.Authenticate(conStr);
bool validLogin = auth.ValidateUser(userName, password);
if(validLogin)
{
Common.Core.User = auth.GetCurrentUser();
}

高层正在插入中间层服务/应用程序层,并希望使用更优雅的解决方案来处理单点登录。因此,决定使用 WIF 服务来处理登录和验证。此外,我们希望尽量减少每个 Web 项目中必须更改的代码,即尝试在 Common.Core 中保留尽可能多的更改。

我看到了一些展示如何将 STS 引用添加到 Web 项目的示例。这在用户验证未考虑到另一个项目(如 Core.Common)的情况下会很好地工作。但是,在我们的场景中,我们如何在仍然通过公共(public)类库的同时处理验证?

理想情况下,我想添加对 Core.Common 类库的 STS 引用,并将直接数据库逻辑(上面的 auth.ValidateUser)替换为对 STS 服务的调用。但是,甚至可以这样做吗?请求是否必须在web项目中发起?如果是这样,两个地方都需要 STS 引用吗?

任何遵循相同 Web 项目 -> 类库 -> STS 服务路径的教程或资源将不胜感激。

最佳答案

我还建议使用 WIF :-)

在基于声明的场景中,身份验证过程是“相反的”。您的应用不会调用任何人,它会从可信来源 (STS) 接收所需信息。

“STS 引用” 不是库引用。它是您的应用程序与安全 token 的可信来源之间的逻辑连接。 token 是您的应用程序用来决定如何处理用户请求的工件。

我同意@nzpcmad 的观点,您很可能可以完全删除对 Common.Core 库的调用。看看您还能用它做什么可能很有用。 Common.Core.User 对象为您提供了什么?

如果它只是用户的属性(例如姓名、电子邮件、角色等),您很可能可以创建一个简单地包装 IPrincipal 的新版本/strong> 由 WIF(ClaimsPrincipal)提供。

例如(大约没有错误处理,伪代码):

public User CurrentUser()
{
var user = new User();
var cu = HttpContext.Current.User as IClaimsPrincipal;
user.Name = cu.Name;
user.eMail = (cu.Identity as IClaimsIdentity).Claims.First( c=> c.ClaimType = "eMail" ).Value;
return user;
}

正如@nzpcmad 所说,您可以使用 ADFS 或其他一些 STS。您的应用不会关心。

关于c# - 向现有项目添加 WIF STS 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7506866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com