2013-05-15 58 views
1

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

我将为这些服务使用WebAPI。

所以这里是我遇到麻烦的地方:我读过的大多数(或者全部)Api Key/OAuth场景涉及(在某个点或另一个位置)坐在屏幕前的用户。

我需要组合一个业务伙伴将调用的API。这些电话将来自一个自动化过程 - 链中任何地方都不会有一个人可以通过登录凭证重定向到网站。

但是,我不想只有任何人到处打电话给我的服务。

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

我曾经希望能够使用DotNetOpenAuth完成这个(或类似的东西),但我遇到的每一个例子都以“用户被重定向到一个登录页面”开头,我只需要“双腿”认证。这个?

有没有一种更好的方式去?

回答

5

如果您正在寻找在随后的OAuth 2你去流划线是Client Credentials Grant

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

DotNetOpenAuth支持客户端凭证授予。你可以看到它的一个实例here;然而,即使作者声明它是“资源所有者密码凭证”授予它实际上是客户端凭证授予,也要知道。

上面的博客文章与最新的DotNetOpenAuth代码库有点不合拍,但是这些代码很快就被识别和更改了。

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

+0

感谢马克,这看起来很有希望。现在检查出来... – JMarsch

+0

嗨马克,我已经通读了代码。我有一点困惑:有一些代码载入公共和私人证书。我曾认为OAuth提供的认证方式不依赖于SSL证书。这是一个必需的步骤吗?我在这里错过了什么? – JMarsch

+0

Hi @JMarsch OAuth 2规范与OAuth 1的不同之处在于,它依赖于HTTPS通信来处理所有请求,这使得在承载令牌的“理论”中可以不受保护地发送......但是,实际上应该保护承载令牌。生成的“令牌”即承载令牌需要被信任。在示例博客中,因此在这些示例中使用SSL证书的私钥进行签名。虽然在OAuth 2规范中未强制承载令牌的签名或加密,但建议您使用它。 DotNetOpenAuth因此将该签名应用于令牌。 –