实现两条腿的OAuth提供程序
我正试图找到解决OAuth规范、它的需求和我能找到的任何实现的方法,到目前为止,它看起来确实比它的价值更麻烦,因为我很难找到一个单一的资源来将它整合在一起。或者可能只是我在寻找比大多数教程更专业的东西 我有一套现有的API——一些是Java的,一些是PHP的——我现在需要保护这些API,而且出于一些原因,OAuth似乎是正确的选择。不幸的是,我无法找到合适的资源来帮助我建立和运行一个提供商,这对这一理论是一个挑战。因为其中大部分都是系统对系统API的使用,所以我需要实现一个两条腿的提供者。考虑到这一点实现两条腿的OAuth提供程序,oauth,2-legged,oauth-provider,Oauth,2 Legged,Oauth Provider,我正试图找到解决OAuth规范、它的需求和我能找到的任何实现的方法,到目前为止,它看起来确实比它的价值更麻烦,因为我很难找到一个单一的资源来将它整合在一起。或者可能只是我在寻找比大多数教程更专业的东西 我有一套现有的API——一些是Java的,一些是PHP的——我现在需要保护这些API,而且出于一些原因,OAuth似乎是正确的选择。不幸的是,我无法找到合适的资源来帮助我建立和运行一个提供商,这对这一理论是一个挑战。因为其中大部分都是系统对系统API的使用,所以我需要实现一个两条腿的提供者。考虑到
谢谢你的帮助。我会退一步,想想一个经过适当身份验证的客户端将向你发送什么 您能否将密钥和凭据存储在一个公共数据库中,该数据库可以从这两组服务访问,并且只使用一种语言实现OAuth提供程序?当用户向服务(PHP或Java)发送请求时,您可以对照公共存储进行检查。当用户设置OAuth客户端时,您可以通过PHP或Java应用程序(您的首选)完成所有这些操作,并将凭据存储在公共数据库中 有一些Oauth提供程序是用其他语言编写的,您可能想看看:
- PHP-(参见页面底部)
- 红宝石
- .NET
- 客户端发送/user.json/123?showFriends=true&showStats=true&checksum=kjDSiuas98SD987ad
- 服务器获取所有这些信息,在数据库中查找用户“123”,加载他的密钥,然后(使用客户端使用的相同方法)根据请求参数重新计算自己的校验和
- 如果服务器生成的校验和与客户机发送的校验和匹配,则请求正常并执行,如果不匹配,则视为被篡改并被拒绝 校验和被称为HMAC,如果你想要一个很好的例子,它就是Amazon Web服务使用的(他们称参数为“签名”而不是“校验和”) 因此,考虑到这项工作的关键组件之一是客户机和服务器必须以相同的方式生成HMAC(否则它们将不匹配),必须有关于如何组合所有参数的规则。。。然后我突然明白了OAuth所有的“参数的自然字节排序”废话。。。它只是定义了如何生成签名的规则,因为它需要 另一点是,在HMAC生成中包含的每个参数都是一个值,在发送请求时不能对其进行篡改 因此,如果您只是将URI干编码为签名,例如:
- /user.json==askJdla9/kjdas+Askj2l8add
- 罗布,我不知道你是在哪里发现这个问题的,但我想加上我的2美分,以防其他人碰到这个问题
几个月前,我或多或少有过同样的问题,在一年的大部分时间里,我都在听“OAuth”。我正在开发一个需要保护的RESTAPI,所以我开始阅读OAuth。。。然后我的眼睛开始在我的头上向后滚动
我可能花了整整一两天的时间浏览和阅读,直到我和你们一样,觉得OAuth是个令人困惑的垃圾,于是放弃了它
因此,我开始研究保护API的方法,并开始更好地掌握保护API的方法。最流行的方式似乎是向API发送请求以及整个消息(使用只有您和服务器知道的秘密编码)的校验和,服务器可以使用该校验和来确定消息在从客户端发送的过程中是否被篡改,如下所示: