【问题标题】:Need to authenticate users through a WCF service that is connected to a database需要通过连接到数据库的 WCF 服务对用户进行身份验证
【发布时间】:2011-09-26 14:51:48
【问题描述】:

我对正确进行身份验证越来越感到沮丧。通常我会使用我不熟悉的术语,所以回答者会误解我的问题。它没有帮助但事实上这是一个有许多实现的案例。

所以现在我将尝试解释有关我的项目的事实和要求,以便我可以找到一个好的解决方案。

我将拥有一个包含我需要的信息的数据库。此信息中将包括用户名和密码的加盐哈希。此数据库将连接到 WCF Web 服务,该服务将数据提供给其他前端项目。

其中一个前端项目是一个 asp.net MVC 3 网站,用户将使用它来登录等。现在,此类项目中的默认值是某种 SQlMembership,在这种情况下是不正确的,因为此站点未连接到数据库(它甚至可能不是 MSQL 数据库)。

以下是我看过但不太清楚如何正确使用的实现。

1) 在 MVC 项目中编写我自己的 MembershipProvider,它将查询 WebService 以进行验证。这里我的意思是它只会调用一些方法来满足它的所有需求。不喜欢它的安全问题,客户端解决方案。

2) 使用服务端 MembershipProvider 进行验证,但是我必须在每个操作中发送用户名密码,并且出于安全原因我无法存储密码。

3) 然后我发现了一个叫做 WCF authenticationService http://msdn.microsoft.com/en-us/library/system.web.applicationservices.authenticationservice.aspx 的东西,它似乎是我需要的,但我在理解它是如何工作的时候遇到了问题。我不希望它成为我服务的一部分,但它似乎是一项专门的服务。它也没有真正解释它是如何进行身份验证的(我需要基于我的表进行自定义身份验证,而不是为我创建的一些默认表)。这是Should authentication be in a separate service for wcf? 的帖子,有同样的问题,我不确定如何解决。

WCF 身份验证服务能否成为适合我的工具?

你能为不懂asp.net、web或服务术语的人回答这个问题吗?

编辑

这是我希望但不确定是否存在的一种解决方案。

WCF 服务公开了在服务中定义的 MembershipProvider、RoleProvider、ProfileProvider。

在 MVC web.config 中的 members\providers\add 下,添加 MembershipProvider 以及指向服务的端点。与 RoleManager 等相同。

所以当我在 MVC 项目中调用 MembershipProvider 来验证用户时,它会自动调用服务并在那里检查,当它发生在 Authorize 属性上时,它还会自动检查服务中的 RoleProvider。

然而,我也想限制服务调用本身,即使它们在 [Authorized] 属性方法中,在引用 Web 服务的其他客户端中也可能不是这样。如果来自网站的呼叫能够自动访问 forms.authentication cookie,我们会很高兴。

【问题讨论】:

  • 你有没有想过解决这个问题?我正朝着同样的方向前进……

标签: wcf asp.net-mvc-3 authentication asp.net-membership


【解决方案1】:

如果用户登录或访问您的服务的用户,我不清楚您想要准确验证什么。另外,我不确定您对 WCF 安全性的回答是什么意思,不使用服务术语,也不知道您希望如何在不了解 asp.net 的情况下解决这个问题。不过我会尽力而为。

  • 如果您要对用户登录进行身份验证,您可以实现自己的 MembershipProvider 并拥有服务请求凭据并返回经过身份验证的用户。
  • 通过身份验证后,您可以为每个用户分配一个 GUID。此 GUID 是随每条消息一起传播的 ID(编码在消息头中)并验证用户调用服务方法。
  • 这不涉及传输安全性,如果您希望您的消息在网络上是安全的,您应该配置它,但这是另一回事,不涉及身份验证。

希望这对您有所帮助。我试图让它尽可能地减少技术性,并遗漏了任何过于复杂的东西。希望这会有所帮助...

【讨论】:

  • 你可以使用术语,你可能只需要解释它的含义。我并不愚蠢,只是对一些技术术语一无所知:) 现在我不确定网络安全中的事情通常是如何完成的。所以首先我需要对用户进行身份验证,然后当他请求一些信息时,我需要确保允许他访问这些信息。例如,他一个人可以访问他的个人资料信息。因此,当我看到这个 WCF 身份验证服务时,我想:也许我可以针对 MembershipProvider 存储的服务端进行身份验证,并且当 [Authorize] MVC 端时它会自动查找 rolse
  • "如果您正在验证用户登录,您可以实现自己的 MembershipProvider 并拥有服务请求凭据并返回经过身份验证的用户。"好的,我知道 Abstract MembershipProvider 并且可以实现它。但是,我不明白您所说的“服务请求凭据”是什么意思。这些凭证是什么?是存储的cookie吗? “返回经过身份验证的用户” 好的,现在我完全失去了你。我猜你的意思是某种存储用户名/密码相关信息的用户对象
  • @IngóVals 我并不是要暗示你很愚蠢,安全从来都不是一个简单的问题。凭据我的意思基本上是用户名和密码。通过返回经过身份验证的用户,我的意思是 MembershipProvider 将返回经过身份验证的用户并将其设置在 cookie 中,但是您还需要返回用户 GUID 以便以后在调用服务时能够识别他。
  • 没想到你有暗示,只是开玩笑。那么 MembershipProvider 将是服务端吗?这不会让我无法在网站项目中使用 [Authorize] 属性吗?令牌/GUID 也是您必须手动执行的操作。没有像自动功能或使用它的方法吗?我希望这就是 WCF AuthenticationService。
  • @IngóVals 不,MembershipProvider 将在您的 Web 服务器上,但它访问服务以验证用户身份。但是,您不必这样做,您可以在不使用服务的情况下与用户进行身份验证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 2011-08-03
  • 1970-01-01
  • 2011-02-20
  • 2013-02-23
  • 2011-10-05
  • 2013-09-01
相关资源
最近更新 更多