一旦你知道OAuth2协议的工作原理,设置OAuth2提供程序就非常容易。这是一个2或3步骤的过程(取决于你的设置以及你是否代表用户获取令牌还是只从服务器获取令牌)。
你需要:
你需要在你的代码中找出如何进行以下操作:
- 创建客户端(公共和私有访问令牌)
- 找出授权和令牌终点的名称(通常为
/authorize
和/token
)
- 了解如何处理作用域
获取令牌的第一步是调用/authorize?response_type=code&client_id=[YOUR ID]&redirect_uri=[YOUR REDIRECT URI]&scope=[YOUR SCOPE]
,其中:
- clientid ([YOUR ID])是你的公共访问令牌
- redirect_uri ([YOUR REDIRECT URI])是你的重定向URI。完成授权步骤后,你将被重定向到该URI
- scope是你未来令牌的范围
完成后(通常有一个提交按钮),你的浏览器将被重定向到指定的URI,并在URL中带有一个代码(code = blah)。保存这个值。
当你获得了这个代码后,调用另一个终点:/token?client_id=[YOUR ID]&client_secret=[YOUR SECRET]&grant_type=authorization_code&scope=[YOUR SCOPE]&code=[YOUR CODE]&redirect_uri=[YOUR REDIRECT URI]
参数:
- client_id - 再次是你的客户端公钥
- client_secret - 你的私钥(这应该是一个服务器端调用)
- scope - 令牌的范围 - 必须与第一次调用相匹配
- redirect_uri - 重定向URI - 必须与第一次调用相匹配
- code - 你收到的代码
如果一切顺利,你将在屏幕上看到包含令牌信息的JSON对象。
后台发生了什么
步骤1(授权)
当您确认表格时,服务器会创建一个临时令牌(称为授权令牌),其寿命通常非常短(我的oauth2 sp代码通常设置为60秒)。这是您的服务器从接收代码到触发第2步所需的时间。它只是一个确认系统,其目的还包括存储步骤1中提供的信息以防止劫持。
步骤2(令牌)
这是您实际创建访问令牌的地方。大量验证,大量处理,但最终,令牌只是将您的client_id和令牌链接在一起的值。这就是全部。
无耻的宣传:如果您正在使用Laravel框架,我已经从头开始构建了这个功能(而不是使用糟糕的,未记录的示例代码):http://bundles.laravel.com/bundle/oauth2-sp