.net - SAAS/云 Web 应用程序和桌面应用程序之间的共享身份验证

标签 .net openid identity wif cardspace

一个简单的场景:

假设我们在云中有一个 Web 应用程序,允许用户使用 OpenID 进行注册。 (我愿意使用 Windows Live ID 作为替代方案) 他们可以登录并更新一些元数据,例如他们最喜欢的颜色是什么。

如果我现在想从桌面客户端获取此信息,我该怎么做? 我可能必须公开 Web 服务才能查询此信息,但身份验证如何?

DotNetOpenAuth还有 Windows Identity Foundation ,我们还有 CardSpace 等
但是我到底从哪里开始呢?我需要哪一个?我需要全部 3 个吗?
那么 STS 呢,有没有针对 OpenID/Windows Live ID 的?

有没有人看到使用这些技术的示例可以满足我的要求? 有什么指点吗?

最佳答案

在您的脑海中区分身份验证和授权的概念。您在您的网站上验证用户。您可以使用 OpenID、InfoCard、STS 或用户名+密码来执行此操作。调用您的服务以获取用户特定信息的客户端应用程序必须授权,这传统上意味着它们要求用户提供用户名+密码,这是一种反模式,并且在您使用更强或如您所见,替代凭证,例如 OpenID 或 InfoCard。

授权应用程序应使用 OAuth 等委托(delegate)协议(protocol),该协议(protocol)允许用户访问允许桌面应用程序访问用户私有(private)数据的网页,而无需用户向应用程序公开其凭据。

DotNetOpenAuth 支持这个完整的场景。它带有示例 OAuth 和 OpenID 站点。我建议您查看 project templates 中的任何一个它演示了 OpenID 登录(Web 表单甚至包括 InfoCard 登录作为一个选项)以及 OAuth 服务提供商,使其适用于 Web 用户并立即授权这些客户端应用程序。

关于.net - SAAS/云 Web 应用程序和桌面应用程序之间的共享身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2356110/

相关文章:

python - 使用 python w/rest api 与 Azure Key Vault 交互

entity-framework - 在 Entity Framework [代码优先] 数据库上使用始终加密

c# - 在 System.Linq.Expressions 中不带大小写(但使用默认值)切换

asp.net - HttpApplication 事件改变线程

openid - 如何将 Google 联合登录限制到特定的 Apps 域?

javascript - 使用 Mozilla 角色控制安全性

vba - 什么时候VBA中的两个对象相同?

c# - 空合并运算符的工作原理

c# - 非等待的 Task.Run 和 Task.RunSynchronously 之间有什么区别

facebook - facebook的 "openid"url是什么?