将OpenID与Web服务一起使用:最佳的身份验证方法?

时间:2009-07-08 13:57:06

标签: c# asp.net-mvc web-services openid oauth

我正在寻找有关对我的WebService进行身份验证的最佳方法的一些指导。现在,我在.NET 3.5上有一个标准的WebService,以及一个位于此WebService之上的MVC网站。

MVC网站使用OpenID对用户进行身份验证,在开发阶段,我们只是将用户的OpenID声明标识符传递给WebService进行身份验证。显然,这不是我们上线时将向客户发布的内容。

所以我的问题是:对WebService进行身份验证的最佳方式是什么?

我使用的一些API使用了身份验证令牌。我们的另一个想法是,在连接到WebService时,向客户端传递一个加密密钥,它们可以用于所有传输。

我在这里大声思考,再次,非常感谢任何帮助!谢谢!

...

更新:现在我已经创建了一个具有OpenIdURL属性的自定义SoapAuthenticationHeader。这用于所有服务调用以验证用户。问题是双重的:

  1. 如果黑客知道用户的OpenIdURL,他们就可以轻松获得对WebService的访问权。
  2. OpenIdURL目前以纯文本形式传递。
  3. 因此,我可以在连接到WebService时将加密密钥传递给客户端,并让客户端在SoapAuthentication头中加密OpenIdURL。但我不确定如何最好地解决这个问题......

3 个答案:

答案 0 :(得分:3)

您可能想看看OAuth:

http://oauth.net/

(使用http://oauth.net/code/进行编码。)

因为它专门适用于这种情况(Open ID不是,真的)。

关于SA的另一个问题是询问保护Web服务的最佳方法,并讨论了Open ID和OAuth:

Web Service Authentication using OpenID

答案 1 :(得分:0)

ASMX Web服务(Microsoft现在认为是“遗留”)无法使用OpenID进行身份验证。他们只能使用IIS提供给他们的东西。您可以添加一个SoapExtension来为它们执行OpenID身份验证,但我不会在那里花时间。

我不确定OpenID是否足够确定,但我怀疑它可以通过联合安全性与WCF集成。我相信其他人会回答有关详情。

答案 2 :(得分:0)

这不是一个真正的答案,但我不能发表评论......

你说“我在.NET 3.5上有一个标准的WebService,以及一个位于这个WebService之上的MVC网站”。

我可能会离开这里,但语言暗示这两个人坐在同一台服务器上。如果是这样,为什么不能只共享用户数据库和cookie令牌?

詹姆斯