【问题标题】:Using OpenID with WCF and no browser, is it possible?使用带有 WCF 且没有浏览器的 OpenID,这可能吗?
【发布时间】:2009-05-09 15:52:05
【问题描述】:

根据我对 OpenID 所做的大部分阅读,似乎可能需要浏览器。我正在编写一个 WCF 应用程序并想使用 OpenID 作为身份验证方法,但我的应用程序不是 Web 应用程序。是否可以在不需要 Web 浏览器的情况下同时使用 WCF 和 OpenID?

【问题讨论】:

  • 很抱歉这么晚的评论。但是“无浏览器”是指显示您自己的登录窗口并让用户输入他们的,例如谷歌用户名和密码吗?如果我是用户,我绝不会这样泄露我的用户名/密码。

标签: wcf openid


【解决方案1】:

虽然 OpenID 可以吹捧其规范独立于 cookie 等,因为规范实际上并没有规定如何使用这些东西,但实际上,除了登录网站之外,我从未见过任何好的 OpenID 解决方案,其中确实是它的主要用例。

但是有一个好方法可以继续使用 WCF 和 OpenID。将 OAuth 添加到组合中。 DotNetOpenAuth 库有一个示例,展示了如何授权 WCF 客户端通过 OAuth 调用 WCF 服务,在服务端,用户使用 OpenID 作为授权过程的一部分登录。

所以基本上,如果您的 WCF 应用需要“登录”以调用 WCF 服务,作为一次性设置的一部分:

  1. 应用会弹出一个浏览器,用户可以在其中看到 WCF 服务网站(OAuth 服务提供者)
  2. 用户使用他们的 OpenID 登录(尽管用户可能已经登录,在这种情况下他们可以跳过这一步)
  3. OAuth SP 询问用户“您要授权此 [wcf 应用] 访问此站点吗?”
  4. 用户说是,然后关闭浏览器。
  5. 借助 OAuth 协议,WCF 应用现在可以访问 WCF 服务。

这是可行的,因为在幕后,当用户通过 Web 浏览器对服务说“是”时,会为 WCF 应用程序分配一个特殊的机器友好凭据,它以类似的方式与每个 WCF 服务调用一起使用用户名/密码将是。

查看 DotNetOpenAuth 库。它有样例以及完成这项工作所需的一切。

【讨论】:

  • 这篇文章很有见地,谢谢!我来看看 DotNetOpenAuth。
  • @andrew-arnott 我知道这个已经很老了。网站已关闭,您有新链接吗?我在github上搜了好几个repo,不知道是不是一样
  • 该项目现在位于github.com/DotNetOpenAuth/DotNetOpenAuth,但不再维护。
【解决方案2】:

通过阅读OpenID Authentication 2.0 Specification,我似乎得到了答案:

虽然协议中的任何内容都不需要 JavaScript 或现代浏览器,但身份验证方案与“AJAX”风格的设置很好地配合。这意味着最终用户无需离开当前网页即可向依赖方证明其身份。

OpenID 身份验证仅使用标准 HTTP(S) 请求和响应,因此它不需要用户代理或其他客户端软件的任何特殊功能。 OpenID 与使用 cookie 或依赖方或 OpenID 提供者会话管理的任何其他特定机制无关。对用户代理的扩展可以简化最终用户交互,但不需要使用该协议。

现在我只需要想出一个聪明的方法让它与基于 WCF 的依赖方一起工作......

【讨论】:

    【解决方案3】:

    【讨论】:

    • 这听起来很简单。不需要浏览器交互?
    • 不需要浏览器交互,但是我不知道如何使用这个provider,可能他对ASP.NET有一些依赖,让你激活兼容模式。请参阅:msdn.microsoft.com/en-us/library/aa702682.aspx 存在几个 OpenIDMembershipProvider,我没有测试任何一个。假设它们按预期工作,您只需“插入”您的 openIdMembershipProvider,然后说 WCF 使用它来验证请求。
    猜你喜欢
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多