【问题标题】:Implementing an API Key with DotNetOpenAuth使用 DotNetOpenAuth 实现 API 密钥
【发布时间】:2013-05-10 15:12:49
【问题描述】:

我需要对我们将托管的一些 Web 服务实施身份验证。我想使用开放标准,所以我对 OAuth 很感兴趣。

我将为这些服务使用 WebAPI。

所以这就是我遇到麻烦的地方:我读过的大多数(或可能全部)Api Key/OAuth 场景都涉及(在某些时候)坐在屏幕前的用户。

我需要整合一个业务合作伙伴将调用的 API。呼叫将来自一个自动化流程——在链条中的任何地方都不会有人可以通过登录凭据重定向到网站。

但是,我不希望任何人过来打电话给我的服务。

所以,我了解了 OAuth,以及它如何使用共享密钥来签署每个请求,我认为这就是我所追求的。 (我会设置一个会话密钥,或者可以考虑将其中一个参数设置为“ticks”值,并且只在短时间内接受请求等)

我有点希望我可以使用 DotNetOpenAuth 来完成这个(或类似的东西),但我遇到的每个示例都以“用户被重定向到登录页面”开头。我只需要“2 腿”身份验证.

是否有使用 DotNetOpenAuth 执行此操作的示例?

有没有更好的方法?

【问题讨论】:

    标签: c# authentication oauth asp.net-web-api dotnetopenauth


    【解决方案1】:

    如果您正在查看 OAuth 2,那么您所描述的流程是 Client Credentials Grant

    这种“双腿”/“服务帐户”类型的流程没有基于网页的流程。

    DotNetOpenAuth 支持客户端凭据授予。你可以看到它的一个例子here;但是,请注意,即使作者声明它是“资源所有者密码凭据”授权,它实际上是客户端凭据授权。

    上面的博客文章与最新的 DotNetOpenAuth 代码库有些不协调,但这些代码很快就会被识别和更改。

    我相信目前 DotNetOpenAuth 仅支持使用 Http Basic 身份验证发出 Bearer 令牌。还有其他更具异国情调的扩展 OAuth 2 具有类似的流程,例如JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants(但如上所述,这还不是 DotNetOpenAuth 的一部分)。

    【讨论】:

    • 嗨,马克,我已经阅读了代码。我有一点有点困惑:那里有一些代码可以加载公共和私有证书。我曾认为 OAuth 是为了提供一种不依赖 SSL 证书的身份验证方式。这是必需的步骤吗?我在这里错过了什么?
    • 嗨@JMarsch OAuth 2 规范与 OAuth 1 的不同之处在于它确实依赖 HTTPS 通信来处理所有请求,这在“理论上”允许不记名令牌在不受保护的情况下发送......但是,确实应该保护 Bearer 令牌。生成的“令牌”,即不记名令牌需要被信任。在示例博客中,因此在这些示例中使用 SSL 证书的私钥对其进行签名。尽管在 OAuth 2 规范中没有强制要求对承载令牌进行签名或加密,但还是建议这样做。因此,DotNetOpenAuth 将签名应用于令牌。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 2015-07-08
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 2012-06-22
    • 2017-04-20
    相关资源
    最近更新 更多