【问题标题】:How should I share authentication from a desktop application to a web application using OAuth 2.0我应该如何使用 OAuth 2.0 从桌面应用程序共享身份验证到 Web 应用程序
【发布时间】:2015-11-11 08:48:45
【问题描述】:

我有一个用 ASP.Net 编写的 RESTful API,它实现了 OAuth 2 进行身份验证,目前通过 Web 应用程序访问它。我还有一个旧版桌面客户端,可以直接访问相同的资源(不是通过 RESTful API 也没有 OAuth,而是使用相同的登录凭据并访问相同的数据库)。我现在试图满足的要求是允许用户单击桌面应用程序中的链接,以便将 Web 应用程序打开到特定屏幕,并且当他们这样做时,让 Web 应用程序自动进行身份验证,以便他们不必手动登录(因为他们已经登录了桌面应用程序)。

我正在努力研究如何在框架的约束下处理这个问题。一般来说,我对 OAuth 2 不太熟悉,但据我了解,我不应该在客户端之间共享令牌,并且没有专门针对这种移交的流程(除非我遗漏了什么)。在最坏的情况下,我可以在 OAuth 之外生成一个临时令牌,供 Web 客户端用来进行身份验证,而不是用户名和密码,但我希望避免超出框架中已有的内容来做我需要做的事情.

所以问题是这样的:OAuth 2.0 框架中是否有一些体面的方法来处理两个应用程序之间的这种“握手”,还是我应该构建自己的处理方法?

【问题讨论】:

    标签: asp.net rest authentication oauth


    【解决方案1】:

    使用临时一次性令牌实际上是 OAuth 规范的一部分(授权码授权类型)。在这种情况下,这个短暂的代码可以交换为 access_token(和 refresh_token)。您将必须实现此授权码的生成和验证。

    如果您使用的是 OWIN OAuth 中间件:

    1. 您可以在桌面客户端应用程序访问的单独 API 端点生成代码。
    2. 收到令牌后,将其传递到您的浏览器并通过安全连接将其定向到带有grant_type=authorization_code 的身份验证端点。示例:调用 Process.Start("https://example.com/ExternalLogin/authorization_code_goes_here")。在网页上使用grant_type=authorization_code 将用户重定向到您的 OAuth 令牌端点。
    3. AuthenticationTokenProvider.Receive 将被调用,您将在其中验证您的令牌。 (Example code here)。
    4. 验证成功后,将调用 OAuthAuthorizationServerProvider.GrantAuthorizationCode,您将在其中处理经过身份验证的用户,方法与处理 grant_type=password 的方式相同。

    请记住,您的令牌验证逻辑应确保您的令牌是短暂的、只能使用一次并通过安全连接传输。

    如果您想进一步研究此主题,这有时称为“单点登录”。

    【讨论】:

      猜你喜欢
      • 2011-01-22
      • 1970-01-01
      • 2023-03-09
      • 2015-09-28
      • 2010-11-06
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多