PHP中的工作流OAuth 1.0a

PHP中的工作流OAuth 1.0a,php,security,oauth,Php,Security,Oauth,我试图理解OAuth已经有一段时间了,但对于工作流和处理所用值的建议,我仍然有一些问题。我正在进行一个PHP三条腿OAuth 1.0a项目,用于学习目的。这里描述了我将要提到的步骤 为什么在步骤5中返回令牌?我以为消费者已经知道代币了,就像代币的秘密一样。所以它被用作消费者发送数据的请求的标识符?或者我认为发送的令牌与步骤2中发送的请求令牌相同,这是错误的吗 这里列出的回调URL是可选的,但在其他规范中它被认为是必需的。我在考虑让人们在服务提供商的数据库中存储他们的回调URL,因为它不会经常更改

我试图理解OAuth已经有一段时间了,但对于工作流和处理所用值的建议,我仍然有一些问题。我正在进行一个PHP三条腿OAuth 1.0a项目,用于学习目的。这里描述了我将要提到的步骤

  • 为什么在步骤5中返回令牌?我以为消费者已经知道代币了,就像代币的秘密一样。所以它被用作消费者发送数据的请求的标识符?或者我认为发送的令牌与步骤2中发送的请求令牌相同,这是错误的吗

  • 这里列出的回调URL是可选的,但在其他规范中它被认为是必需的。我在考虑让人们在服务提供商的数据库中存储他们的回调URL,因为它不会经常更改或根本不会更改,因此不会在步骤1中发送它,也不会在步骤5中从数据库中检索它

  • 由于速度和可能的泄漏,RSA散列方法不受欢迎,因此每个人都决定使用HMAC方法。我们是否需要在步骤1和6中发送散列方法?此外,我看到很少有服务提供商提供其他方法

  • 使用mt_rand()进行散列是不安全的,因此我考虑使用openssl_random_pseudo_bytes(),它安全吗?例如,作为使用hash_hmac()进行散列的密钥

  • 我经常看到sha1用于请求和访问令牌以及秘密令牌。像sha256或sha512这样较长的散列不是更安全吗?如果安全性受到影响,那么存储空间一定不会成为问题,对吗

  • 即使使用者知道令牌,您也必须知道返回的用户在哪个OAuth会话上操作。在此步骤中,令牌充当会话标识符。否则,您将如何知道返回的用户是谁(除非您自己在回调中提供会话标识符)

  • 我建议你遵守规范。因为如果您是服务提供商,您不控制消费者,所以您对回调要求一无所知。如果是动态的(例如,包含如1所示的会话标识符),则存储的回调将出现问题

  • 再说一遍。坚持规范。尽管规范不是一成不变的,但很多聪明人一直在研究规范,并长期认真地思考规范更改的影响。由于一个规范可能无法同时控制两个域(服务提供商和消费者),因此您必须就认证方法达成一致。如果域不知道该方法,它们如何知道如何解释密码?如果当前的方法被认为是不安全的怎么办?如果有一方改变了方法,你怎么知道

  • 这个函数应该是加密安全的。你可以用它

  • 当然,你可以使用更强的散列。也许你应该。确保两个域都理解该方法。看