【问题标题】:Authorize request between web services by Single Access Token using DotNetOpenAuth使用 DotNetOpenAuth 通过单一访问令牌授权 Web 服务之间的请求
【发布时间】:2012-03-31 11:34:53
【问题描述】:

我正在尝试使用 oAuth 实现身份验证,并为此使用 DotNetOpenAuth。

我们有多个 REST Web 服务来满足项目需求。有AuthenticationService、Customer Service、Order Service等一个。

消费者将使用此服务对用户进行身份验证并从中获取访问令牌。现在消费者将在客户服务上的一个方法并传递访问令牌。

客户服务现在想要验证来自身份验证服务的访问令牌。

我尝试在客户服务中捕获消费者发送的授权标头,并尝试将其从客户服务传递给身份验证服务,但它抛出“签名无效”错误,这似乎是正确的,因为消费者用于构建签名的 URI 是客户的服务,但在验证服务中验证时,实际请求来自不同的客户服务。

希望我能够解释这个问题。

我该如何解决这个问题?

【问题讨论】:

    标签: .net oauth dotnetopenauth


    【解决方案1】:

    我假设您使用的是 OAuth 1.0。听起来您将 OAuth 授权从客户服务转发到身份验证服务,身份验证服务认为令牌是为 it 而不是客户服务的。如果是这样,那么这个无效签名是设计使然,因为您实际上(并且意外地)进行了一次攻击,MITM 将令牌重定向到另一个服务。

    每个服务都必须为自己验证访问令牌——它不能将其转发给另一个服务。每个服务都可以通过与身份验证服务共享ITokenManager 的数据库来做到这一点。

    【讨论】:

    • 我不想在服务之间共享令牌数据库。所以现在,这就是我想要做的。我为每个 Web 服务分配了使用者密钥和秘密。在应用程序启动时,Web 服务将对其进行身份验证。消费者会将 Access_token 及其消费者密钥发送给客户服务,后者将调用身份验证服务来验证访问令牌和消费者的密钥。
    • 当我在 IDE 下使用 WebDev Server 进行测试时,Application_Start 的客户服务身份验证有效,但在 IIS 7 中托管时失败并返回错误“响应在此上下文中不可用”。我试图在 Application_BeginRequest 中移动此代码,以便我可以在呼叫中验证服务(如果它已经不是)。但这也失败了。关于如何执行此操作的任何帮助?
    • 我不遵循你的新设计。但如果您不想共享令牌数据库,那么您应该强烈考虑支持该场景的 OAuth 2。
    • 我正在查看 oAuth2.0 的示例。示例 OAuthAuthorizationServer 库使用 OpenId,但我想在这里提供我自己的实现。此外,现在我只想验证消费者应用程序返回访问令牌,然后使用资源服务器访问资源。如何做到这一点?
    • 授权服务器验证用户的方式与 OAuth 授权正交。因此,无论如何,您都可以使用自己的实现。我对您的“消费者应用程序返回访问令牌”语句感到困惑。消费者不返回访问令牌。他们从授权服务器获取它们。
    猜你喜欢
    • 2018-01-15
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    相关资源
    最近更新 更多